У меня есть словарь ресурсов, который я использую для определения внешнего вида (стиля) для моего приложения.
Я только что создал другой словарь ресурсов, который содержит шаблоны данных, которые я использую в нескольких различныхэкраны (и даже несколько раз на одном и том же экране) для отображения моих бизнес-объектов.
Я хотел бы изменить некоторые стили по умолчанию в моих шаблонах данных, чтобы элементы управления лучше подходили;однако я хотел бы, чтобы элементы управления наследовали тот же стиль, что и остальная часть экрана.Поэтому, естественно, я хочу использовать свойство BasedOn для этой задачи.
Проблема, с которой я сталкиваюсь, заключается в том, что я не уверен, как установить свойство BasedOn в значение.
Например,в словаре ресурсов, который содержит мои стили (называемые «myStyle.xaml»), у меня есть:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:primatives="clr-namespace:System.Windows.Controls.Primitives;assembly=PresentationFramework"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="{x:Type Label}">
<Setter Property="Foreground" Value="#F5F5F5" />
<Setter Property="FontSize" Value="12"></Setter>
<Setter Property="Width" Value="120"></Setter>
<Setter Property="FontFamily" Value="Arial"></Setter>
</Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="FontSize" Value="12"></Setter>
<Setter Property="Width" Value="120"></Setter>
<Setter Property="Height" Value="25"></Setter>
<Setter Property="Background" Value="Black"></Setter>
</Style>
<!-- .... and so on .... -->
</ResourceDictionary>
Я использую этот ресурс в следующем окне:
<Window x:Class="SiteSetupWindow4"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:primatives="clr-namespace:System.Windows.Controls.Primitives;assembly=PresentationFramework"
Title="A Screen">
<Window.Resources>
<ResourceDictionary x:Key="defaultStyleX">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary x:Name="DefaultStyles" Source="Resources/myStyle.xaml" />
<ResourceDictionary x:Name="Templates" Source="Resources/myTemplates.xaml"></ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
Теперь яесть другой словарь ресурсов, который содержит шаблоны данных, которые я использую в моем окне.Это называется "myTemplates".Стиль применяется к DataTemplate, как и ожидалось;однако я хотел бы перезаписать некоторые аспекты стиля в DataTemplate (например, ширину).
Это то, что я устал, однако я не могу заставить свойство BasedOn работать ...
(myTemplate.xaml)
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DataTemplate x:Key="PanelInfo">
<StackPanel>
<StackPanel.Resources>
<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Width" Value="120" />
</Style>
<Style TargetType="Label">
<Setter Property="Width" Value="180" />
</Style>
<Style TargetType="ComboBox">
<Setter Property="Width" Value="120" />
</Style>
<StackPanel.Resources>
<StackPanel Orientation="Horizontal">
<Label Content="Type:"></Label>
<ComboBox>
<ComboBoxItem Content="{Binding Path=Type}" IsSelected="True"></ComboBoxItem>
</ComboBox>
<!--...and so on -->
</StackPanel>
</StackPanel>
</ResourceDictionary>
Это не удается .... Я также пытался использовать DynamicResource, но это также не удается.Я не уверен, как обойти это.
Любой совет будет принята с благодарностью!
Спасибо,
-Фринни