我正在为我制作一个DLL,以简化我的工作,因为我在每个项目中都有类,所以当我可以使用一个DLL来完成工作时,我为什么要复制它们,
我还想添加一些控件,按钮,所以它是这样的:
我创建了一个按钮,它运行良好,但我想向其添加一个自定义样式,以便在鼠标悬停时禁用背景突出显示,现在我以前使用过这种样式并且效果很好,但是在以前,我会将样式添加到 app.xaml 资源,然后将样式设置为按钮,如下所示:
style="{静态资源禁用背景突出显示}">
但是由于DLL没有app.xaml,我该怎么办,如何为DLL内部的控件添加样式? 我在谷歌上找到的只是,将 DLL 中的资源引用到 WPF 应用程序的 app.xaml,但这不是我想要的, 我试过这个:
<Button x:Class="SRX.Windows.Controls.SRXButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SRX.Windows.Controls"
mc:Ignorable="d"
d:DesignHeight="35" d:DesignWidth="100" Content="OK" Background="White" BorderBrush="Blue" Foreground="Blue" MouseEnter="Button_MouseEnter" MouseLeave="Button_MouseLeave" Style="{StaticResource DisableBackgroundHighlight}">
<Button.Resources>
<Style x:Key="DisableBackgroundHighlight" TargetType="Button">
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Name="border" BorderThickness="0" BorderBrush="Black" Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Opacity" Value="0.8" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Button.Resources>
但它不起作用,它显示"无法解析资源"禁用背景突出显示"。 虽然它编译但在启动时崩溃。 如果我在问题解释中遗漏了某些内容,请让我解决,提前感谢。
只需将 xaml 文件添加到项目中即可。让我们称之为 通用.xaml,通常是您的自定义 coltrols 的模板所在的位置。
此文件将具有以下格式:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Your.Domain.Generic">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="whatever else you defined in another xaml"/>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="TextBox" ....
</ResourceDictionary>
在其他程序集上,您可以像导入其他任何程序集一样导入"样式"程序集:
xmlns:style="clr-namespace:Your.Domain.Shared"
当然,假设您的样式程序集被命名为 Your.Domain.Shared