繁体   English   中英

ToggleButton Style仅适用于最后一个ToggleButton

[英]ToggleButton Style only works on last ToggleButton

我正在尝试自定义我的ToggleButtons,以便在检查时他们用绿色表示“是”,如果没有选中,则用红色表示“否”。

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

<!--  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是任一值的最后一个,则它会正确显示。 具有相同值的所有先前按钮均为空白。 身高也在缩小,但我用触发器上方的'Height'Setter修正了。 为了说明,在创建新记录时,它看起来像:

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

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

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

但改变这一点,以便每个ToggleButton单独引用样式( <ToggleButton Style="{StaticResource YesNoToggleStyle}" ... /> )没有任何区别。

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

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

任何人都可以告诉我该怎么做才能让多个ToggleButtons正确使用相同的风格?

这适合我。 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>

尝试将Content属性替换为ContentTemplate:

  <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <TextBlock Text="Yes"/>
            </DataTemplate>
        </Setter.Value>
    </Setter>

在我的情况下,我希望在一个公共dll中有一个“Locked”ToggleButton,并在我的应用程序中重复使用。 这是我的结果,对我有用。 也许有人发现它很有用(把它放在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>

设定者目标名称无法识别

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM