Я ищу способ определения безымянного стиля в определенном окне только для XAML, который влияет на все текстовые поля, даже те, которые находятся внутри пользовательских элементов управления.
Вот пример: предположим, у меня есть одно конкретное окно, в которомЯ хочу установить для свойства Foreground значение Red для всех TextBoxes, включая те, которые содержатся в UserControls.Я пытаюсь сделать это так:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
mc:Ignorable="d"
Title="MainWindow" Width="300"
SizeToContent="Height">
<Window.Resources>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Style.Setters>
<Setter Property="Foreground" Value="Red"/>
</Style.Setters>
</Style>
</Window.Resources>
<StackPanel Orientation="Vertical">
<TextBox Text="A-Regular"/>
<TextBox Text="B-Bold">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Style.Setters>
<Setter Property="FontWeight" Value="Bold"/>
</Style.Setters>
</Style>
</TextBox.Style>
</TextBox>
<local:MyUserControl/>
<TextBox Text="C-Regular"/>
</StackPanel>
</Window>
Используемый UserControl выглядит следующим образом:
<UserControl x:Class="WpfApplication1.MyUserControl"
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"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel Orientation="Vertical">
<TextBox Text="Like A, but in UserControl"/>
<TextBox Text="Like B, but in UserControl">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Style.Setters>
<Setter Property="FontWeight" Value="Bold"/>
</Style.Setters>
</Style>
</TextBox.Style>
</TextBox>
</StackPanel>
</UserControl>
В результате окно:
снимок экранаwindow
Все в порядке, кроме TextBox "Как B, но в UserControl", которое выделено жирным шрифтом и черным.Я бы ожидал увидеть красный текст, как и во всех других текстовых окнах.
Есть ли способ, чтобы безымянный стиль в ресурсе Window влиял на все текстовые поля в UserControl, даже те, которые расширяют текущий стиль TextBox с помощью BasedOn ?Я ищу способ, где мне не нужно адаптировать все места, где я "вызываю" UserControl (то есть, где у меня <local:MyUserControl/>
в окне).Также я не хочу адаптировать сам UserControl, поскольку он может находиться в сторонней библиотеке.