如何在 setter 上为触发器 wpf c# 设置静态变量

问题描述

在我的自定义控件中,我的控件模板中有两个彼此相邻的 Toggle 按钮,当按下一个或另一个 ToggleButton 时,我试图为整个自定义控件的背景设置一种颜色。

这是我的理解代码:

<local:SplitButtonModel.Template>
     <ControlTemplate TargetType="{x:Type local:SplitButtonModel">

          <ControlTemplate.Resources>
               <Style TargetType="{x:Type ToggleButton">
                    <Setter Property="Template">
                         <Setter.Value>
                              <ControlTemplate TargetType="{x:Type ToggleButton}">
                                   <Rectangle x:Name="rect" Fill="Transparent" Stroke="#00000000"/>
                                   <ContentPresenter SnapToDevicePixels="{TemplatedBinding SnapToDevicePixels}" 
                                                     HorizontalAlignment="{TemplatedBinding HorizontalContentAlignment}" 
                                                     VerticalAlignment="{TemplatedBinding VerticalContentAlignment}" 
                                                     RecognizeAccessKey="True"/>
                                   <ControlTemplate.Triggers>
                                        <Trigger Property="IsPressed" Value="True">
                                             <Setter Property="Fill" TargetName="rect" Value="Red"/>
                                        </Trigger>
                                   </ControlTemplate.Triggers>
                              </ControlTemplate>
                         </Setter.Value>
                    </Setter>
               </Style>
          </ControlTemplate.Resources>


          <Border x:Name="border" Background="{TemplatedBinding Background}" 
                  BorderBrush="{TemplatedBinding BorderBrush}" 
                  BorderThickness="{TemplatedBinding BorderThickness}">
      
               <Grid>
                    <Grid.ColumnDefinitions>
                         <ColumnDefinition Width="*"/>
                         <ColumnDefinition Width="Auto" MinWidth="15"/>
                    </Grid.ColumnDefinitions>

                    <ToggleButton Grid.Column="0"/>
                    <ToggleButton Grid.Column="1"/>
               </Grid>
          </Border>
          <ControlTemplate.Triggers>
               <Trigger Property="IsPressed" Value="True">
                    <Setter Property="Background" TargetName="border" Value="Red"/>
               </Trigger>
          </ControlTemplate.Triggers>
     </ControlTemplate>
</local:SplitButtonModel.Template>

所以在我将背景设置为红色的模板中,它不起作用,因为 IsPressed 绑定到 ToggleButton 并且它永远不会在主模板中被调用。现在,如果我在 IsPressed 上将 Rectangle“rect”Fill 属性设置为红色,那将正常工作,但它只会使 ToggleButton 被按下为红色,而我希望两个 ToggleButton 都被触发,即使另一个没有被按下。>

我正在考虑创建一个静态类,如下所示:

public static class GlobalHelper
{
     public static bool ButtonPressed = false;
}

然后我会设置触发器如下:

<Trigger Property="IsPressed" Value="True">
     <Setter Property="{Binding Source="{x:Static local:GlobalHelper.ButtonPressed}}" Value="True"/>
</Trigger>

但这不起作用,那么修改静态值的方法是什么,以便在主模板中我可以使用 DataTrigger 访问它,并且取决于它是真还是假,我可以将背景设置为红色?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)