gpt4 book ai didi

silverlight - 我需要做什么才能使属性元素语法适用于 Silverlight 中的自定义附加属性?

转载 作者:行者123 更新时间:2023-12-04 02:42:53 24 4
gpt4 key购买 nike

我有这样的课:

public class Stretcher : Panel {

public static readonly DependencyProperty StretchAmountProp = DependencyProperty.RegisterAttached("StretchAmount", typeof(double), typeof(Stretcher), null);

public static void SetStretchAmount(DependencyObject obj, double amount)
{
FrameworkElement elem = obj as FrameworkElement;
elem.Width *= amount;

obj.SetValue(StretchAmountProp, amount);
}
}

我可以使用属性语法在 XAML 中设置拉伸(stretch)量属性:
<UserControl x:Class="ManagedAttachedProps.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:map="clr-namespace:ManagedAttachedProps"
Width="400" Height="300">

<Rectangle Fill="Aqua" Width="100" Height="100" map:Stretch.StretchAmount="100" />

</UserControl>

我的矩形被拉伸(stretch)了,但我不能使用这样的属性元素语法:
<UserControl x:Class="ManagedAttachedProps.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:map="clr-namespace:ManagedAttachedProps"
Width="400" Height="300">

<Rectangle Fill="Aqua" Width="100" Height="100">
<map:Stretcher.StretchAmount>100</map:Stretcher.StretchAmount>
</Rectangle>
</UserControl>

使用属性元素语法,我的 set block 似乎完全被忽略了(我什至可以在其中放置无效的 double 值),并且永远不会调用 SetStretchAmount 方法。

我知道可以做这样的事情,因为 VisualStateManager 做到了。我尝试过使用 double 以外的类型,但似乎没有任何效果。

最佳答案

我想我明白了这一点,尽管我不完全确定我理解它起作用的原因。

为了让您的示例正常工作,我必须创建一个名为 Stretch 的自定义类型,并带有一个名为 StretchAmount 的属性。一旦我这样做并将其放在属性元素标签中,它就可以工作了。否则它不会被调用。

public class Stretch
{
public double StretchAmount { get; set; }
}

并且属性更改为..
public static readonly DependencyProperty StretchAmountProp = DependencyProperty.RegisterAttached("StretchAmount", typeof(Stretch), typeof(Stretcher), null);

public static void SetStretchAmount(DependencyObject obj, Stretch amount)
{
FrameworkElement elem = obj as FrameworkElement;
elem.Width *= amount.StretchAmount;
obj.SetValue(StretchAmountProp, amount);
}

要让它在您不使用属性元素的场景中工作,您需要创建一个自定义类型转换器以允许它工作。

希望这会有所帮助,即使它没有解释我仍在努力理解的原因。

顺便说一句 - 对于真正的脑筋急转弯,请查看反射器中的 VisualStateManager。 VisualStateGroups 的依赖属性和 setter 都是 内部 .

关于silverlight - 我需要做什么才能使属性元素语法适用于 Silverlight 中的自定义附加属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/282062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com