【发布时间】:2015-03-11 15:52:52
【问题描述】:
我有一个 ListView,它显示 WrapPanel 内的按钮列表。按钮内的文本可能会有所不同,因此按钮的宽度也可能会有所不同。
我希望所有按钮都具有相同的宽度,这意味着我希望所有按钮都具有 WrapPanel 内较大按钮的宽度。有没有办法做到这一点?
这是我的列表视图:
<ListView Margin="8 10 8 8"
VerticalAlignment="Top"
ScrollViewer.CanContentScroll="True"
Background="Transparent"
x:Name="ResourcesList"
BorderThickness="0"
ItemContainerStyle="{DynamicResource LvItemStyle}"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ItemsSource="{Binding CadResource.Values}">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel HorizontalAlignment="Left" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
<ItemContainerTemplate>
<Button Content="{Binding ResourceAlias.Value}"
x:Name="ResourceButton"
Command="{Binding ElementName=ResourcesList, Path=DataContext.SelectResourceCommand}"
CommandParameter="{Binding}"
VerticalContentAlignment="Stretch"
BorderThickness="0"
Margin="2"
MinWidth="75"
Template="{DynamicResource ResourceButtonTemplate}"
Foreground="{DynamicResource ResouceAliasText}"
Background="{Binding ResourceAlias.BackColor, Mode=TwoWay, Converter={converter:StringFormatConverter}}">
<Button.ContextMenu>
<ContextMenu Name="ContextMenu"
ItemsSource="{Binding ContextMenu}"
ItemContainerStyle="{StaticResource MenuItemStyle}" />
</Button.ContextMenu>
</Button>
</ItemContainerTemplate>
</ListView.ItemTemplate>
</ListView>
这是我正在使用的按钮的模板:
<ControlTemplate x:Key="ResourceButtonTemplate"
TargetType="{x:Type ButtonBase}">
<Border x:Name="border"
Background="{DynamicResource ResourceButtonBackground}"
BorderThickness="1"
Height="20"
BorderBrush="{DynamicResource ResourceButtonBorder}"
SnapsToDevicePixels="True">
<Border BorderThickness="0 1 0 0"
Background="Transparent"
BorderBrush="{DynamicResource ResourceHighlight}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<images:ResourceSquare Fill="{TemplateBinding Background}"
Grid.Column="0"
Style="{StaticResource ViewBoxStyleChildWindow13X13}"
x:Name="ResourceSquare"
HorizontalAlignment="Left"
Margin="3 2 0 2" />
<images:ResourceTriangle Fill="{TemplateBinding Background}"
Grid.Column="0"
Style="{StaticResource ViewBoxStyleChildWindow13X13}"
x:Name="ResourceTriangle"
Visibility="Collapsed"
HorizontalAlignment="Left"
Margin="3 2 0 2" />
<ContentPresenter x:Name="contentPresenter"
Grid.Column="1"
ContentTemplate="{TemplateBinding ContentTemplate}"
Content="{TemplateBinding Content}"
ContentStringFormat="{TemplateBinding ContentStringFormat}"
Focusable="False"
TextBlock.FontSize="{Binding FontSize}"
Margin="7 0 7 0"
RecognizesAccessKey="True"
HorizontalAlignment="Center"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
<images:ResourceConnected Fill="{DynamicResource IconToolbar}"
Grid.Column="2"
Style="{StaticResource ViewBoxStyleChildWindow10X10}"
HorizontalAlignment="Right"
VerticalAlignment="Top" />
</Grid>
</Border>
</Border>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding IsSelected.Value}"
Value="True">
<Setter TargetName="border"
Property="Background"
Value="{DynamicResource ListSelectedLine}" />
<Setter TargetName="border"
Property="BorderBrush"
Value="{DynamicResource BorderHighLight}" />
</DataTrigger>
<Trigger Property="Button.IsDefaulted"
Value="True">
<Setter Property="BorderBrush"
TargetName="border"
Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
</Trigger>
<Trigger Property="IsMouseOver"
Value="True">
<Setter Property="Background"
TargetName="border"
Value="{DynamicResource CadMouseOver}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
【问题讨论】:
-
澄清一下,您希望所有按钮的大小都为环绕面板中最大按钮的大小?