Estas respuestas son grandes si usted tiene un número fijo o diseño fijo para los botones, pero si como yo, hay una serie dinámica de botones que vienen de una unión y la contenida en un ItemsControl
entonces esto no es factible. Pero hay una manera simple y todavía implica utilizar la propiedad de tamaño compartido de Grid.
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>
contenedor principal:
<ItemsControl ItemsSource="{Binding MappingPlugins, ElementName=page}" ItemTemplate="{StaticResource ODIF.Mapping}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Grid.IsSharedSizeScope="True"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
En esencia el contenido del botón puede ser en sí mismo un ceñidor que luego puede colocar sus etiquetas e iconos como sea necesario, pero a pesar de los botones no residen en la misma cuadrícula (cada uno es suyo) la cuadrícula puede compartir el tamaño siempre que establezca la propiedad del contenedor raíz (ItemsControl
) de Grid.IsSharedSizeScope
en True.
Esto obligará a la red de contenido de cada botón para tener el mismo tamaño exacto basado en el más grande sin tener que tienen los mismos botones en una cuadrícula predefinida.
Por favor intente no codificar el tamaño de la interfaz de usuario y tal. Es una mala práctica tener en cuenta la internacionalización y (en menor medida ahora que WPF usa 'unidades independientes de resolución') varias pantallas de tamaño y DPI. Tenemos paneles de disposición disponibles para su uso. Ellos son buenos. –
Se supone que los botones son 50dlu x 23dlu. WPF no admite unidades de diálogo; entonces estás bastante atascado. –