0

我使用类库(WPF 用户控件库)来托管项目解决方案中的其他(C#-)应用程序使用的一些用户控件。我希望这些控件使用位于类库顶部范围的 XAML ControlTemplates。ControlTemplates 不必在类库之外使用。

这里是一个模板声明:

<ControlTemplate TargetType="{x:Type Button}" x:Key="TemplateImageButtonSmall">
    <Grid>
        <Image Name="img" Source="/PSCommonUI;component/Images/Buttons/ButtonMinus_normal.png"/>
    </Grid>
</ControlTemplate>

然后我在类库中有一个用户控件,包含:

<Button Height="57" Margin="10,0,6,5" Name="button3" Template="{StaticResource TemplateImageButtonSmall}" Width="82">

在应用程序中,我可以使用 App.xaml 文件来定义模板。但是,在类库中我没有这个选项。

我在网上搜索并找到了一些答案,包括使用 generic.xaml 文件、ComponentResourceKey、合并资源文件和其他我觉得过于复杂的东西。

我还读到主题定义(一般的资源)不应该驻留在类库中。

但是,如果我只需要在此类库中为托管控件提供一些主题,那么最佳实践如何?

提前致谢,

朱利安

4

2 回答 2

1

我不确定您的意思,但是,如果您希望来自特定 UIElement 及以下的子 UIElement 使用控件模板,那么您可以在资源字典中定义模板并将字典合并到您希望字典的顶部控件中可见。

编辑:

该程序集仅包含其中的类和资源。它没有自己的事件(例如 OnApplicationLoaded)。

控件的 XAML 可以包含其自己的资源(例如控件模板)以供其自身和子控件使用,从而定义默认样式。

您的应用程序可以将资源字典合并到树的任何级别(应用程序、窗口、控件...),从而覆盖默认值。

如果您希望样式是动态的(可以通过导入资源字典来覆盖),那么请使用您的 XAML 中的DynamicResource关键字。如果您的资源在相同的 XAML 中定义并且不能被覆盖,则使用StaticResource关键字。

于 2012-05-06T16:20:14.427 回答
0

将资源字典添加到您的类库并在那里定义您的资源(模板)。它不必是 generic.xaml。

然后在每个用户控件或其他 .xaml 文件中引用您需要使用 Xaml 的资源字典,类似于:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="... path to dictionary 1"/>
            <ResourceDictionary Source="... path to dictionary 2"/>        
            <ResourceDictionary Source="... etc"/>
        </ResourceDictionary.MergedDictionaries>                
    </ResourceDictionary>
</UserControl.Resources>

然后,您可以使用合并字典中的资源键。

于 2012-05-06T17:28:15.000 回答