wpf切换按钮:将文本和图像一起显示为内容

wpf切换按钮:将文本和图像一起显示为内容,wpf,xaml,mvvm,Wpf,Xaml,Mvvm,我有一个切换按钮,我想显示一个图像和一些文本时,切换按钮选中 当取消选中时,我想显示另一个图像和另一个文本 这是我的Xaml: <Window.Resources> <Image Source="DeActiveButton.png" x:Key="ImgDeactivate" /> <Image Source="ActiveButton.png" x:Key="ImgActivate" /> <Style TargetTy

我有一个切换按钮,我想显示一个图像和一些文本时,切换按钮选中 当取消选中时,我想显示另一个图像和另一个文本

这是我的Xaml:

<Window.Resources>
<Image Source="DeActiveButton.png"
       x:Key="ImgDeactivate" />
<Image Source="ActiveButton.png"
       x:Key="ImgActivate" />

<Style TargetType="{x:Type ToggleButton}"
       x:Key="MyToggleButtonStyle">
    <Setter Property="Content"
            Value="{DynamicResource ImgDeactivate}" />
    <Style.Triggers>
        <Trigger Property="IsChecked"
                 Value="True">
            <Setter Property="Content"
                    Value="{DynamicResource ImgActivate}" />
        </Trigger>
    </Style.Triggers>
</Style>
</Window.Resources>

<Grid>
 <ToggleButton x:Name="btnDeactivate"
                          HorizontalAlignment="Stretch"
                          VerticalAlignment="Stretch"
                          Width="85"
                          Content="Deactivate"
                          Style="{DynamicResource MyToggleButtonStyle}">
            </ToggleButton>
</Grid>


但是上面的xaml只显示图像,我想随图像一起显示一些文本,这取决于切换按钮状态如何实现这一点

ContentControl
s像
ToggleButton
一样只能有一个
UIElement
作为其内容。但是,这个元素很容易成为容器控件,例如
网格
堆栈面板
。将容器控件设置为单个内容元素后,就可以随意添加任意数量的项

如果在
ToggleButton
ControlTemplate
中定义这些控件,则可以在
ControlTemplate.Triggers
部分中引用它们。试着这样做:

<ToggleButton>
    <ToggleButton.Style>
        <Style TargetType="{x:Type ToggleButton}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ToggleButton}">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                                <RowDefinition />
                            </Grid.RowDefinitions>
                            <TextBlock Name="Text" Text="Here's some text" HorizontalAlignment="Center" />
                            <Image Name="Image" Grid.Row="1" Source="/AppName;component/Images/UncheckedImage.png" />
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsChecked" Value="True">
                                <Setter TargetName="Text" Property="Text" Value="Here's some different text" />
                                <Setter TargetName="Image" Property="Source" Value="/AppName;component/Images/CheckedImage.png" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ToggleButton.Style>
</ToggleButton>

ContentControl
s像
切换按钮
只能有一个
ui元素
作为其内容。但是,这个元素很容易成为容器控件,例如
网格
堆栈面板
。将容器控件设置为单个内容元素后,就可以随意添加任意数量的项

如果在
ToggleButton
ControlTemplate
中定义这些控件,则可以在
ControlTemplate.Triggers
部分中引用它们。试着这样做:

<ToggleButton>
    <ToggleButton.Style>
        <Style TargetType="{x:Type ToggleButton}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ToggleButton}">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                                <RowDefinition />
                            </Grid.RowDefinitions>
                            <TextBlock Name="Text" Text="Here's some text" HorizontalAlignment="Center" />
                            <Image Name="Image" Grid.Row="1" Source="/AppName;component/Images/UncheckedImage.png" />
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsChecked" Value="True">
                                <Setter TargetName="Text" Property="Text" Value="Here's some different text" />
                                <Setter TargetName="Image" Property="Source" Value="/AppName;component/Images/CheckedImage.png" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ToggleButton.Style>
</ToggleButton>


你不能放一个stackpanel吗?类似于:“@sexta13但当切换按钮的状态改变时,我如何更改图像和文本您不放置堆栈面板吗?”类似于:“@sexta13但当切换按钮的状态改变时,我如何更改图像和文本