Te odpowiedzi są świetne, jeśli masz ustaloną liczbę lub stały układ dla przycisków, ale jeśli tak jak ja istnieje szereg dynamicznych przycisków pochodzących z wiążącym i zawarte w ItemsControl
to nie jest wykonalne. Ale jest prosty sposób i nadal wymaga użycia właściwości sharedsize siatki.
DataTemplate:
<DataTemplate x:Key="ODIF.Mapping">
<Button HorizontalContentAlignment="Left" Background="#FFEEEEEE" BorderBrush="#FFBDBDBD">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="PluginButtonsWidth"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" SharedSizeGroup="PluginButtonsIconHeight"/>
<RowDefinition Height="Auto" SharedSizeGroup="PluginButtonsNameHeight"/>
</Grid.RowDefinitions>
<Image Width="32" Height="32" Source="{Binding PluginIcon}" RenderOptions.BitmapScalingMode="HighQuality"/>
<TextBlock Grid.Row="1" Text="{Binding PluginName}"/>
</Grid>
</Button>
</DataTemplate>
kontener nadrzędny:
<ItemsControl ItemsSource="{Binding MappingPlugins, ElementName=page}" ItemTemplate="{StaticResource ODIF.Mapping}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Grid.IsSharedSizeScope="True"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Zasadniczo treść przycisk może sam być filtr polaryzacyjny, który następnie można umieścić etykiety i ikony jak potrzebne, ale mimo przycisków nie znajdują się w tej samej siatce (każda z nich jest ich własną), ale sieć może nadal udostępniać jej rozmiar, o ile ustawiono właściwość kontenera głównego (ItemsControl
) z Grid.IsSharedSizeScope
na wartość True.
Spowoduje to, że siatka zawartości każdego przycisku będzie miała taki sam dokładny rozmiar w oparciu o największy, bez konieczności posiadania samych przycisków we wstępnie zdefiniowanej siatce.
Proszę nie próbować kodować rozmiaru interfejsu użytkownika i takich. Jest to zła praktyka, biorąc pod uwagę internacjonalizację i (w mniejszym stopniu teraz, gdy WPF używa "niezależnych od rozdzielczości jednostek") różnych rozmiarów i ekranów DPI. Mamy do dyspozycji panele układów. Oni są dobrzy. –
Przyciski mają być 50dlu x 23dlu. WPF nie obsługuje jednostek dialogowych; więc prawie utknąłeś. –