XAML - 在自定义 UserControl 中定义附加属性
XAML - Defining attached properties in custom UserControl
我有一个自定义 UserControl,我想将自定义属性附加到某些包含的 UI 元素。
我试过这样实现,但是VS不接受我的XAML代码。
它说 MyProp 不可用或不可访问。
<UserControl
x:Class="mynamespace.MyDataSourceSelector"
xmlns:local="clr-namespace:mynamespace"
... >
<TabControl>
<TabItem Header="Tab1" local:MyDataSourceSelector.MyProp="something1"/>
<TabItem Header="Tab2" local:MyDataSourceSelector.MyProp="something2"/>
</TabControl>
<UserControl>
我的自定义用户控件 class 看起来像这样:
public partial class MyDataSourceSelector: UserControl
{
...
public string MyProp
{
get { return (string)GetValue(MyPropProperty); }
set { SetValue(MyPropProperty, value); }
}
public static readonly DependencyProperty MyPropProperty
= DependencyProperty.Register(
"MyProp",
typeof(string),
typeof(MyDataSourceSelector),
new PropertyMetadata(null)
);
}
我想为每个选项卡绑定一个值,然后在需要时读出活动选项卡的 MyProp 值。
我该怎么做?
你搞砸了一些事情。在您的情况下,您应该声明扩展属性,例如
public static class TabItemExtensions
{
public static void SetMyProp(TabItem element, string value)
{
element.SetValue(MyPropProperty, value);
}
public static string GetMyProp(TabItem element)
{
return (string)element.GetValue(MyPropProperty);
}
public static readonly DependencyProperty MyPropProperty
= DependencyProperty.RegisterAttached(
"MyProp",
typeof(string),
typeof(TabItemExtensions),
new PropertyMetadata(null)
);
}
并像
一样使用它
<TabItem Header="Tab1" local:TabItemExtensions.MyProp="something1"/>
我有一个自定义 UserControl,我想将自定义属性附加到某些包含的 UI 元素。
我试过这样实现,但是VS不接受我的XAML代码。 它说 MyProp 不可用或不可访问。
<UserControl
x:Class="mynamespace.MyDataSourceSelector"
xmlns:local="clr-namespace:mynamespace"
... >
<TabControl>
<TabItem Header="Tab1" local:MyDataSourceSelector.MyProp="something1"/>
<TabItem Header="Tab2" local:MyDataSourceSelector.MyProp="something2"/>
</TabControl>
<UserControl>
我的自定义用户控件 class 看起来像这样:
public partial class MyDataSourceSelector: UserControl
{
...
public string MyProp
{
get { return (string)GetValue(MyPropProperty); }
set { SetValue(MyPropProperty, value); }
}
public static readonly DependencyProperty MyPropProperty
= DependencyProperty.Register(
"MyProp",
typeof(string),
typeof(MyDataSourceSelector),
new PropertyMetadata(null)
);
}
我想为每个选项卡绑定一个值,然后在需要时读出活动选项卡的 MyProp 值。
我该怎么做?
你搞砸了一些事情。在您的情况下,您应该声明扩展属性,例如
public static class TabItemExtensions
{
public static void SetMyProp(TabItem element, string value)
{
element.SetValue(MyPropProperty, value);
}
public static string GetMyProp(TabItem element)
{
return (string)element.GetValue(MyPropProperty);
}
public static readonly DependencyProperty MyPropProperty
= DependencyProperty.RegisterAttached(
"MyProp",
typeof(string),
typeof(TabItemExtensions),
new PropertyMetadata(null)
);
}
并像
一样使用它<TabItem Header="Tab1" local:TabItemExtensions.MyProp="something1"/>