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;
    }