c# - 使用 Setter 更新样式触发器中的自定义附加属性

标签 c# .net wpf xaml attached-properties

我正在尝试附加属性和样式触发器,希望了解更多相关信息。 我写了一个非常简单的带有附加属性的 WPF Windows 应用程序:

  public static readonly DependencyProperty SomethingProperty = 
      DependencyProperty.RegisterAttached(
          "Something", 
          typeof(int), 
          typeof(Window1),
          new UIPropertyMetadata(0));

  public int GetSomethingProperty(DependencyObject d)
  {
      return (int)d.GetValue(SomethingProperty);
  }
  public void SetSomethingProperty(DependencyObject d, int value)
  {
      d.SetValue(SomethingProperty, value);
  }

我试图用按钮样式部分中定义的属性触发器更新“Something”附加属性:

  <Window x:Class="TestStyleTrigger.Window1"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:local="clr-namespace:TestStyleTrigger;assembly=TestStyleTrigger"
      Title="Window1" Height="210" Width="190">
      <Window.Resources>
          <Style x:Key="buttonStyle" TargetType="{x:Type Button}">
              <Style.Triggers>
                  <Trigger Property="IsPressed" Value="True">
                      <Setter Property="local:Window1.Something" Value="1" />
                  </Trigger>
              </Style.Triggers>
          </Style>
      </Window.Resources>

      <Button Style="{StaticResource buttonStyle}"></Button>
  </Window>

但是,我不断收到以下编译错误:

错误 MC4003:无法解析样式属性“Something”。验证拥有类型是样式的 TargetType,或使用 Class.Property 语法指定属性。第 10 行第 29 位。

我不明白为什么它会给我这个错误,因为我确实在该部分的标记中使用了“Class.Property”语法。谁能告诉我如何解决这个编译错误?

最佳答案

您的依赖属性的支持方法命名不正确并且必须是静态的:

public static int GetSomething(DependencyObject d)
{
    return (int)d.GetValue(SomethingProperty);
}

public static void SetSomething(DependencyObject d, int value)
{
    d.SetValue(SomethingProperty, value);
}

此外,您不应在 XAML 的本地 XML NS 映射中指定程序集,因为命名空间在当前程序集中。改为这样做:

xmlns:local="clr-namespace:TestStyleTrigger"

关于c# - 使用 Setter 更新样式触发器中的自定义附加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/736293/

相关文章:

.net - WPF中最重要的认证?

c# - 将皮肤应用于以编程方式创建的控件

c# - 是否有可用于查询脱机文件结果的 API?

c# - 如何在C#中基于当前日期获取前一周的编号?

c# - 一台服务器上 ASP.NET 站点的最大数量/限制

c# - 如何在 C#/.Net 中模拟结束进程树

c# - 使用 BinaryReader 逐行读取

wpf - MVVM/Prism : Where should dialog box strings be stored?

c# 使用excel打开xml文件

c# - WPF 绑定(bind)不接受任何更改