【发布时间】:2015-02-03 13:38:34
【问题描述】:
我有一个 cs-project-file,其中有一个 ResourceDictionary。 ResourceDictionary 的标记看起来像:
<ResourceDictionary x:Class="BaseLib.Services.TabControlServices.TabStyles"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/BaseLib.WPF.Skinning;component/BaseStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
在这个ResourceDictionary 中,我正在加载另一个位于另一个程序集中的ResourceDictionary。我要使用的部分如下所示:
<Style TargetType="{x:Type TabItem}" x:Key="tabItemStyle">
<Setter Property="BorderThickness" Value="3" />
<Setter Property="BorderBrush" Value="Green" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
<Grid>
<Border x:Name="border" CornerRadius="15,0,0,0"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1,1,1,0" />
<Border BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ContentPresenter ContentSource="Header" Grid.Column="0"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
<Button Grid.Column="1" Width="16" Height="16" Margin="5,0,0,0"
Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"
VerticalContentAlignment="Top" VerticalAlignment="Top"
HorizontalContentAlignment="Left" HorizontalAlignment="Left"
Padding="-4,-4,0,0" Command="{Binding CloseTabCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=TabItem}}">
<Image Source="{x:Static imageProvider:Images.Close}" Width="14" Height="14" />
</Button>
</Grid>
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="border" Property="Background" Value="{StaticResource borderColor}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
现在我在 cs-code 中创建一个新的TabItem,例如:
TabItem tabItem = new TabItem
{
Header = DateTime.Now.ToString("dd.MM.yyyy");
};
tabControl.Items.Add(tabItem);
tabItem.IsSelected = true;
现在我想将 tabItemStyle 分配给代码生成的-TabItem。
我试过了:
tabItem.Style = Application.Current.FindResource("tabItemStyle") as Style;
但不幸的是,这不起作用。我收到Exception:找不到资源“tabItemStyle”。
我现在的问题是: 如何在位于另一个程序集中的 cs-code 中使用样式?
【问题讨论】: