Установка стилей для субконтролей usercontrol - PullRequest
1 голос
/ 23 сентября 2011

Скажи, что у меня есть такой элемент управления:

<UserControl x:Class="StyleTest.UserControl1"
         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">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Button Grid.Row="0">Style please</Button>
    <Button Grid.Row="1">Style please</Button>
</Grid>

И я хочу установить для всех кнопок в этом элементе управления фон = зеленый. Но я не хочу влиять на другие кнопки в моей программе и не хочу изменять код элемента управления.

Что я нашел сейчас, так это:

<Window x:Class="StyleTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:loc="clr-namespace:StyleTest"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <Style x:Key="UserControlStyles" TargetType="Button">
        <Setter Property="Background" Value="green" />
    </Style>
</Window.Resources>
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Button Grid.Column="0">no Style please</Button>
    <loc:UserControl1 Grid.Column="1">
        <loc:UserControl1.Resources>
            <Style TargetType="Button" BasedOn="{StaticResource UserControlStyles}" />
        </loc:UserControl1.Resources>
    </loc:UserControl1>
</Grid>

Но это будет означать, что я должен добавить этот код к каждому экземпляру элемента управления и некоторый дополнительный код, если я хочу стилизовать, например. Цвет переднего плана TextBoxes также.

Я ищу что-то похожее на это:

        <Style TargetType="Buttons that are childs of UserControl1">
        <Setter Property="Background" Value="green" />
    </Style>

Есть ли способ сделать это?

Я не думаю, что шаблона элемента управления будет достаточно, потому что я не хочу переделывать весь элемент управления, я просто хочу установить цвет кнопок.

Ответы [ 2 ]

6 голосов
/ 23 сентября 2011

В App.xaml вы можете добавить этот стиль, который будет применяться ко всем экземплярам UserControl1

<Style TargetType="StyleTest:UserControl1" >
   <Style.Resources>
     <Style TargetType="Button">
        <Setter Property="Background" Value="green" />
     </Style>
   </Style.Resources>
</Style>
2 голосов
/ 23 сентября 2011

Если я правильно понимаю, вам просто нужно изменить свой UserControl, чтобы добавить туда стиль, а не в элемент управления Window

<UserControl x:Name=UserControl1 ...>
<UserControl.Resources>
   <Style TargetType="Button">
        <Setter Property="Background" Value="green" />
   </Style>
</UserControl.Resources>

Я только что увидел, что вы сказали, что не хотите изменять элемент управления. Вы имеете в виду, что вы не можете изменить xaml UserControl? Почему нет?

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