C# 使用 Setter 更新样式触发器中的自定义附加属性
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/736293/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Updating Custom Attached Property in Style Trigger with Setter
提问by oscarkuo
I was trying out attached properties and style triggers hoping to learn more about it. I wrote a very simple WPF windows app with an attached property:
我正在尝试附加属性和样式触发器,希望了解更多信息。我编写了一个非常简单的 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);
}
And I was trying to update the 'Something' attached property with a property trigger defined in the button style section:
我试图用按钮样式部分中定义的属性触发器更新“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>
However, I kept getting following compilation error:
但是,我不断收到以下编译错误:
error MC4003: Cannot resolve the Style Property 'Something'. Verify that the owning type is the Style's TargetType, or use Class.Property syntax to specify the Property. Line 10 Position 29.
错误 MC4003:无法解析样式属性“Something”。验证拥有的类型是 Style 的 TargetType,或使用 Class.Property 语法来指定 Property。第 10 行位置 29。
I can't understand why it gives me this error because I did use the 'Class.Property' syntax in the tag of the section. Can any one tell me how can I fix this compilation error?
我不明白为什么它会给我这个错误,因为我确实在该部分的标签中使用了“Class.Property”语法。谁能告诉我如何解决这个编译错误?
采纳答案by Kent Boogaart
Your backing methods for the dependency property are named incorrectly and must be static:
您的依赖属性的支持方法命名不正确,并且必须是静态的:
public static int GetSomething(DependencyObject d)
{
return (int)d.GetValue(SomethingProperty);
}
public static void SetSomething(DependencyObject d, int value)
{
d.SetValue(SomethingProperty, value);
}
Also, you shouldn't specify the assembly in the local XML NS mapping in the XAML because the namespace is in the current assembly. Do this instead:
此外,您不应在 XAML 的本地 XML NS 映射中指定程序集,因为命名空间在当前程序集中。改为这样做:
xmlns:local="clr-namespace:TestStyleTrigger"