【问题标题】:Use Style from other Assembly in Codebehind在 Codebehind 中使用来自其他程序集的样式
【发布时间】:2015-02-03 13:38:34
【问题描述】:

我有一个 cs-project-file,其中有一个 ResourceDictionaryResourceDictionary 的标记看起来像:

<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 中使用样式?

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    由于您将具有资源的字典合并到同一控件的 xaml 中。试试:

    this.FindResource("tabItemStyle") as Style;
    

    【讨论】:

      【解决方案2】:

      我在this post的帮助下自己解决了:

      我分配样式的代码现在如下所示:

      ResourceDictionary resourceDictionary = new ResourceDictionary
      {
          Source = new Uri("/BaseLib.Services.TabControlServices;component/TabStyles.xaml", UriKind.RelativeOrAbsolute)
      };
      tabItem.Style = resourceDictionary["TabItemStyle"] as Style;
      

      【讨论】:

        【解决方案3】:

        确保您遵循以下步骤。 1.在你尝试使用样式的项目中添加对程序集的引用 2.在App.xaml中添加主资源字典 如下

         <Application.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary Source="/BaseLib.WPF.Skinning;component/BaseStyles.xaml"/>
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>      
        </Application.Resources>
        

        3。然后尝试如上所述在代码中添加样式。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多