Wpf 如何更改按钮样式取决于宽度
我有一个简单的用户控件,里面只有几个控件,布局如下:Wpf 如何更改按钮样式取决于宽度,wpf,button,resize,controls,visibility,Wpf,Button,Resize,Controls,Visibility,我有一个简单的用户控件,里面只有几个控件,布局如下: <Grid> <DockPanel> <Grid DockPanel.Dock="Left" Margin="25 0 0 2"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/>
<Grid>
<DockPanel>
<Grid
DockPanel.Dock="Left"
Margin="25 0 0 2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image
Grid.Column="0"
Source="image.png"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Width="24"
Height="24" />
<Label
Grid.Column="1"
HorizontalAlignment="Left"
Margin="5 0 0 0"
VerticalAlignment="Center">
<TextBlock
TextTrimming="CharacterEllipsis"
Text="Some text"/>
</Label>
<Button
Grid.Column="2"
x:Name="SendButton"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="5 0 0 0">
<StackPanel Orientation="Horizontal">
<Image
Width="16"
Height="16"
Margin="2 0"
Source="buttonImg1.png"/>
<TextBlock
TextTrimming="CharacterEllipsis"
Text="Button text1"/>
</StackPanel>
</Button>
<Button
Grid.Column="3"
Name="button2"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="5 0 0 0">
<TextBlock
TextTrimming="CharacterEllipsis"
Text="buttonText2"/>
</Button>
</Grid>
<CheckBox
DockPanel.Dock="Right"
HorizontalAlignment="Right"
Margin="0,0,16,0"
Grid.RowSpan="2"
VerticalAlignment="Center">
<TextBlock
TextTrimming="CharacterEllipsis"
Text="checkbox text"/>
</CheckBox>
</DockPanel>
</Grid>
因此,我的问题是,例如,当用户控件调整大小时,如何更改按钮内TextBlock的可见性?如果TextBlock内的文本不适合按钮,请将可见性设置为折叠以使按钮大小变小,然后将其设置为可见以使大小返回初始值?我已尝试将TextBlock可见性绑定到按钮
实际宽度,但当可见性设置为折叠后,按钮的实际宽度在调整大小期间不会变大。请在网格中尝试此操作。Column=“2”
为您的网格尝试此操作。Column=“2”
找到了一个解决方案:
<Grid x:Name="Grid" Grid.Column="2">
<Button
HorizontalAlignment="Center">
<Grid>
<Image x:Name="Image" HorizontalAlignment="Left" Width="16" Height="16" Source="image.png"></Image>
<TextBlock
Padding="20 0 0 0"
Text="send request">
<TextBlock.Visibility>
<MultiBinding Converter="{StaticResource Converter}">
<Binding Path="ActualWidth" ElementName="Grid"/>
<Binding Path="ActualWidth" RelativeSource="{RelativeSource Self}"/>
<Binding Path="ActualWidth" ElementName="Image"/>
</MultiBinding>
</TextBlock.Visibility>
</TextBlock>
</Grid>
</Button>
</Grid>
找到了一个解决方案:
<Grid x:Name="Grid" Grid.Column="2">
<Button
HorizontalAlignment="Center">
<Grid>
<Image x:Name="Image" HorizontalAlignment="Left" Width="16" Height="16" Source="image.png"></Image>
<TextBlock
Padding="20 0 0 0"
Text="send request">
<TextBlock.Visibility>
<MultiBinding Converter="{StaticResource Converter}">
<Binding Path="ActualWidth" ElementName="Grid"/>
<Binding Path="ActualWidth" RelativeSource="{RelativeSource Self}"/>
<Binding Path="ActualWidth" ElementName="Image"/>
</MultiBinding>
</TextBlock.Visibility>
</TextBlock>
</Grid>
</Button>
</Grid>
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
double gridWidth = double.Parse(values[0].ToString());
double textBlockWidth = double.Parse(values[1].ToString());
double imageWidth = double.Parse(values[2].ToString());
return gridWidth - textBlockWidth - imageWidth >= 0
? Visibility.Visible
: Visibility.Collapsed;
}