WPF:有没有办法将您自己的参数传递给UserControl?

时间:2013-12-14 01:28:29

标签: wpf xaml user-controls

让我们具体一点:我的应用有UserControl,其中包含DataGridMainWindow在每个TabControl中都有TabItem个UserControl实例。这是代码:

<TabControlHeight="Auto" HorizontalAlignment="Stretch" Name="tabControl" VerticalAlignment="Stretch" TabStripPlacement="Bottom">
    <TabItem Header="ASCE PR-72" Name="tabItem72">
        <local:UserControl_DataGrid x:Name="widget"
                                VerticalAlignment="Stretch"
                                HorizontalAlignment="Left" />
    </TabItem>
    <TabItem Header="ASCE 48-05" Name="tabItem48">
        <local:UserControl_DataGrid x:Name="gadget"
                                VerticalAlignment="Stretch"
                                HorizontalAlignment="Left" />
    </TabItem>
</TabControl>

我想知道我是否可以传递自己的参数,例如:

Personality="A"

到其中一个TabItems / UserControls和

Personality="B"

到另一个。

我需要某种WhoAmI鉴别器。缺乏理想的参数功能,也许我可以使用如下代码:

if (myName == "widget")
{
    doThat();
}
else if (myName == "gadget")
{
    doTheOther();
}

免责声明:我因提出XY问题而臭名昭着!!

TIA

1 个答案:

答案 0 :(得分:4)

对于第一个问题从TabItem派生自己的类,为Personality添加一个依赖属性并使用它而不是常规的TabItem。

代码:

public enum PersonalityType
{
    A,
    B,
    C
}

public class MyTabItem : TabItem
{
    public PersonalityType Personality
    {
        get { return (PersonalityType)GetValue(PersonalityProperty); }
        set { SetValue(PersonalityProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Personality.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty PersonalityProperty =
        DependencyProperty.Register("Personality", typeof(PersonalityType), typeof(MyTabItem), new PropertyMetadata(PersonalityType.A));
}

然后在您的XAML中执行此操作:

<TabControl>
    <local:MyTabItem Personality="A">Foo</local:MyTabItem>
    <local:MyTabItem Personality="B">Bar</local:MyTabItem>
    <local:MyTabItem Personality="C">Baz</local:MyTabItem>
</TabControl>

请注意,Personality字段也会出现在Visual Studio Properties编辑器中。

对于您的第二个问题,请使用DataTemplating和/或数据触发器根据属性选择适当的模板/样式等。

更新:实际上可以在不创建新TabItem类的情况下进行操作,如果这是您之后尝试使用Google搜索&#34;附加属性&#34;。