【发布时间】:2020-02-12 21:28:28
【问题描述】:
对于 Revit 插件,我正在构建一个 WPF 对话框,其中包含视图、逻辑和一些样式。
很快我就得出结论,将我所有的样式都放入其中是非常混乱的(这只是意味着我有一半时间在滚动浏览我的 XAML)。所以我想将我的样式从我的 XAML 代码中分离出来(就像使用 HTML 和 CSS 一样)。
所以我发现了 以及我应该如何设置它。我有我的窗口,有这个资源代码:
<Window.Resources>
<local:LocationView x:Key="mainViewDataSource" />
<FontFamily x:Key="Ubuntu">pack://application:,,,/Kalec.Enveo;component/src/Resources/Fonts/#Ubuntu</FontFamily>
<FontFamily x:Key="FontAwesomeSolid">pack://application:,,,/Kalec.Enveo;component/src/Resources/Fonts/#Font Awesome 5 Free Solid</FontFamily>
<FontFamily x:Key="FontAwesomeRegular">pack://application:,,,/Kalec.Enveo;component/src/Resources/Fonts/#Font Awesome 5 Free Regular</FontFamily>
<ResourceDictionary x:Key="dictionary" Source="pack://application:,,,/Kalec.Enveo;component/src/WPF/Styles/Dictionary.xaml" />
</Window.Resources>
还有我的字典:
Dictionary.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary x:Key="MergedDictionaries">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionaries/InputStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
和InputStyles.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="SearchInputStyle" TargetType="{x:Type TextBox}">
<Setter Property="Height" Value="30"/>
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Border CornerRadius="15" Background="White" BorderBrush="Transparent" x:Name="border">
<Grid>
<TextBox Text="{Binding Path=Text,
RelativeSource={RelativeSource TemplatedParent},
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"
x:Name="textSource"
Background="Transparent"
Panel.ZIndex="2" />
<TextBox Text="{TemplateBinding Tag}" Background="{TemplateBinding Background}" Panel.ZIndex="1">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Foreground" Value="Transparent"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Text, Source={x:Reference textSource}}" Value="">
<Setter Property="Foreground" Value="Gray"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="Red"/>
<Setter Property="Foreground" Value="Red" />
</Trigger>
<Trigger Property="IsFocused" Value="true">
<Setter Property="Foreground" Value="Blue" />
<Setter Property="BorderBrush" TargetName="border" Value="Blue"/>
</Trigger>
<DataTrigger Binding="{Binding Path=Text}" Value="">
<Setter Property="Text" Value="Vul een adres in"/>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
问题是我似乎无法在我的文本框上使用该样式:
<StackPanel Margin="10,10,0,0" Orientation="Vertical">
<StackPanel Panel.ZIndex="10" Orientation="Horizontal"
Name="SearchParameters"
>
<TextBox Width="220" Style="{DynamicResource SearchInputStyle}"/>
<Button FontFamily="{StaticResource FontAwesomeSolid}"
Content="" Foreground="#31B192" Grid.ColumnSpan="2"
Style="{DynamicResource LocationImport}"
Margin="10, 0, 0, 0"/>
</StackPanel>
我只是收到无法解决的错误。我查看了一些解决方案,其中大多数都告诉我在我的 App.xaml 中包含 ResourceDictionary,但我没有那个文件,因为我的项目是一个类库(这是插件的要求)。
我什至可以使用资源字典吗?还是有其他方法可以在不同的文件中分隔样式或 XAML?
【问题讨论】: