1

我正在尝试自定义我的 ToggleButtons,以便在选中时以绿色表示“是”,在未选中时以红色表示“否”。

我创建了以下样式,它位于我的 Styles 资源字典中。

<!--  ToggleButtons   -->
<Style x:Key="YesNoToggleStyle" TargetType="ToggleButton">
  <Style.Triggers>
    <Trigger Property="IsChecked" Value="True">
      <Setter Property="Background" Value="SpringGreen" />
      <Setter Property="Content">
        <Setter.Value>
          <TextBlock Text="Yes"/>
        </Setter.Value>
      </Setter>
    </Trigger>
    <Trigger Property="IsChecked" Value="False">
      <Setter Property="Background" Value="Crimson" />
      <Setter Property="Content">
        <Setter.Value>
          <TextBlock Text="No"/>
        </Setter.Value>
      </Setter>
    </Trigger>
  </Style.Triggers>
</Style>

这工作......有点。如果 ToggleButton 是任一值的最后一个,则它会正确显示。之前所有具有相同值的按钮都是空白的。高度也在缩小,但我用触发器上方的“高度”设置器修复了它。为了说明,当创建新记录时,它看起来像:

启动切换按钮在我再次单击按钮 1、2、3 和 1 之后:编辑的切换按钮

我最初的样式是从周围的网格中引用的:

<Grid>
  ...
    <Grid.Resources>
      <Style BasedOn="{StaticResource YesNoToggleStyle}" TargetType="{x:Type ToggleButton}" />
    </Grid.Resources>

但是更改它以使每个 ToggleButton 单独引用样式 ( <ToggleButton Style="{StaticResource YesNoToggleStyle}" ... />) 并没有什么不同。

我查看了在 wpf 中自定义切换按钮的切换状态覆盖切换按钮样式,其中效果相同,但它们谈论的是外部图像,而我的问题都在 wpf 中。

我还查看了第二个答案: 我想在选中切换按钮时更改切换按钮的背景颜色,反之亦然, 但是 a)我只有 VS2012 附带的混合 + 草图流预览,并且 b)我是一个完全的菜鸟使用混合并且无法从答案中Select the "Checked State"获得指导(如果此任务需要混合工具,Reset the Background Color我会感到惊讶)。

谁能告诉我如何让多个 ToggleButtons 正确使用相同的样式?

4

3 回答 3

3

这对我有用。在某处Dictionary1.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style x:Key="YesNoToggleStyle" TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource {x:Static ToolBar.ToggleButtonStyleKey}}">
        <Style.Triggers>
            <Trigger Property="IsChecked" Value="False">
                <Setter Property="Background" Value="Crimson" />
                <Setter Property="Content" Value="No"/>
            </Trigger>
            <Trigger Property="IsChecked" Value="True">
                <Setter Property="Background" Value="SpringGreen" />
                <Setter Property="Content" Value="Yes"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</ResourceDictionary>

请注意,该样式基于ToolBar.ToggleButtonStyle.

<Grid>
    <Grid.Resources>
        <ResourceDictionary Source="pack://application:,,,/Dictionary1.xaml"/>
    </Grid.Resources>

    <ItemsControl ItemContainerStyle="{StaticResource YesNoToggleStyle}">
        <ToggleButton />
        <ToggleButton />
        <ToggleButton />
    </ItemsControl>
</Grid>
于 2013-03-15T06:25:23.113 回答
2

尝试将 Content 属性替换为 ContentTemplate:

  <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <TextBlock Text="Yes"/>
            </DataTemplate>
        </Setter.Value>
    </Setter>
于 2014-05-06T13:51:53.873 回答
0

在我的情况下,我想在一个通用 dll 中定义一个“锁定”切换按钮,并在我的应用程序中重用。这是我的结果,它对我有用。也许有人觉得它很有用(把它放在 Resourcedictionary.xaml 中):

<BitmapImage  x:Key="LockedLock"
              UriSource="/...;component/Resources/Lock_closed_16p.png" />
<BitmapImage  x:Key="OpenLock"
              UriSource="/...;component/Resources/Lock_open_16p.png" />

<Style x:Key="LockButton"
       TargetType="ToggleButton">
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <Image Source="{DynamicResource OpenLock }"
                       Width="12"
                       Height="12"
                       Name="contentimage" />
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton , AncestorLevel=1, Mode=FindAncestor }, Path=IsChecked}"
                                 Value="True">
                        <Setter Property="Image.Source"
                                TargetName="contentimage"
                                Value="{DynamicResource LockedLock }" />
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

学分:

通过样式将按钮的内容设置为 <Image>

设置器目标名称无法识别

于 2018-02-06T17:12:31.020 回答