Растянуть сетку WPF по горизонтали внутри RibbonGroup
Как мне растянуть WPF Grid
горизонтально внутри RibbonGroup
? Это не растягивается несмотря на HorizontalAlignment
имущество.
<Window x:Name="FrmMain" x:Class="PhotoCell.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="PhotoCell" Height="386.821" Width="757.701" WindowState="Maximized">
<Grid>
<Image x:Name="imgMain" Margin="10,142,10,9"/>
<Ribbon VerticalAlignment="Top">
<RibbonTab Header="Home" Height="88" VerticalAlignment="Top">
<RibbonGroup Header="Save/Load" Height="88" Margin="0" VerticalAlignment="Top" Width="90">
<Grid HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<RibbonButton x:Name="cmdLoadImage" Background="#FFFFC500" Label="Load" Click="cmdLoadImage_Click" Margin="10,10,10,0" Grid.Row="0" HorizontalAlignment="Stretch" />
<RibbonButton x:Name="cmdSaveImage" Background="#FFFFC500" Label="Save" Click="cmdSaveImage_Click" Margin="10,10,10,0" Grid.Row="1" HorizontalAlignment="Stretch" />
</Grid>
</RibbonGroup>
</RibbonTab>
</Ribbon>
</Grid>
</Window>
Я также попытался добавить
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
После определения строки.
2 ответа
Я не уверен, почему HorizontalAlignment
и HorizontalContentAlignment
свойства не работают должным образом - возможно, это ошибка в шаблонах элементов управления ленты.
В любом случае, есть обходной путь: вы можете связать RibbonGroup
а также Grid
к RibbonTab's
ActualWidth
имущество. Вам может понадобиться использовать конвертер для точной настройки этих значений со смещением, но в целом, он делает свое дело:
<Ribbon VerticalAlignment="Top">
<RibbonTab x:Name="tab" Header="Home" Height="88" VerticalAlignment="Top">
<RibbonGroup Width="{Binding ElementName=tab, Path=ActualWidth}" Header="Save/Load" Height="88" Margin="0" VerticalAlignment="Top">
<Grid Width="{Binding ElementName=tab, Path=ActualWidth}" HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<RibbonButton x:Name="cmdLoadImage" Background="#FFFFC500" Label="Load" Click="cmdLoadImage_Click" Margin="10,10,10,0" Grid.Row="0" HorizontalAlignment="Stretch" />
<RibbonButton x:Name="cmdSaveImage" Background="#FFFFC500" Label="Save" Click="cmdSaveImage_Click" Margin="10,10,10,0" Grid.Row="1" HorizontalAlignment="Stretch" />
</Grid>
</RibbonGroup>
</RibbonTab>
</Ribbon>
Я хотел иметь RibbonGroup
растянулся внутри Ribbon
, Я использовал другой подход. Так как мне нужно было сделать некоторые вычисления (получить ширину всех других групп лент), я не использовал привязку с конвертером. В конвертере я не могу легко добраться до других элементов управления. Я использовал SizeChanged
событие Ribbon
, Здесь я установил ширину RibbonGroup
:
private void RibbonOnSizeChanged(object sender, SizeChangedEventArgs sizeChangedEventArgs)
{
ChangeWidgetsGroupWidth(sizeChangedEventArgs.NewSize.Width);
}
private void ChangeWidgetsGroupWidth(double newRibbonWidth)
{
double otherRibbonGroupWidths = 0;
foreach (RadRibbonGroup item in HomeTab.Items)
{
if (item != rgWidgetsGroup)
{
otherRibbonGroupWidths += item.ActualWidth + 2; // Extra margin between groups
}
}
double width = newRibbonWidth - otherRibbonGroupWidths - 6; // '6' to add extra margin
rgWidgetsGroup.Width = width > 0 ? width : 0;
}
rgWidgetsGroup
это RibbonGroup
Я хотел иметь максимальный размер. Я думаю, что было бы легко сделать что-то подобное для Control
внутри RibbonGroup
,