Безымянный стиль, который можно использовать с BasedOn в UserControls - PullRequest
0 голосов
/ 13 июня 2018

Я ищу способ определения безымянного стиля в определенном окне только для 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, поскольку он может находиться в сторонней библиотеке.

1 Ответ

0 голосов
/ 13 июня 2018

Просто положите Style в <Application.Resources>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...