让我们具体一点:我的应用有UserControl
,其中包含DataGrid
。 MainWindow
在每个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
答案 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;。