Справочный стиль WPF в словаре ресурсов и использование триггеров

У меня есть Style, определенный в словаре ресурсов, который применяется ко всем элементам управления ComboBox. В элементе управления ComboBox я ссылаюсь на стиль следующим образом:

Style="{DynamicResource MyComboBoxStyle}"

Это работает нормально.

Я хочу иметь возможность добавлять триггеры к некоторым элементам управления ComboBox.

Каков хороший способ использовать Style, на который ссылаются, как динамический ресурс, но при этом иметь возможность добавлять Trigger к некоторым элементам управления ComboBox?


person Rob Buhler    schedule 19.04.2010    source источник


Ответы (2)



Обновление: перечитав вопрос, я понимаю, что это не совсем то, о чем спрашивал ОП. Я мог бы удалить это, но, возможно, это будет полезно для тех, кто наткнется на этот вопрос.


Вот пример со словарем ресурсов xaml, определяющим шаблон и триггеры, а также с окном, которое ссылается на этот ресурс и применяет стиль.

Это может помочь кому-то, кто изучает использование шаблонов и триггеров:

Мой ресурс с именем "Style1.xaml"

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ControlTemplate x:Key="TonyTemplate" TargetType="Button">
    <Border Name="Border" 
            BorderBrush="Orange" 
            BorderThickness="3" 
            CornerRadius="2" 
            Background="Ivory" 
            TextBlock.Foreground="Black">
        <Grid>
            <ContentPresenter RecognizesAccessKey="True" 
                              Margin="{TemplateBinding Padding}"/>
        </Grid>
    </Border>
    <ControlTemplate.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter TargetName="Border" Property="Background" Value="Yellow" />
        </Trigger>
        <Trigger Property="IsPressed" Value="True">
            <Setter TargetName="Border" Property="Background" Value="Chartreuse" />
            <Setter TargetName="Border" Property="BorderBrush" Value="DarkKhaki" />
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

My MainWindow Code xaml:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Style1.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>
    <Grid>
        <Button Width="100" Height="50" 
                Template="{StaticResource TonyTemplate}" 
                Content="Click me"/>
    </Grid>
</Window>
person Anthony Queen    schedule 02.07.2013

Создайте новые стили для элементов управления ComboBox, к которым вы хотите применить триггеры, и используйте ссылку BasedOn нового стиля, чтобы установить их базовый стиль.

person Charlie    schedule 19.04.2010
comment
Я получаю следующую ошибку, когда пытаюсь это сделать: «DynamicResourceExtension» не может быть установлен для свойства «BaseOn» типа «Style». - person Rob Buhler; 19.04.2010
comment
Почему вы используете DynamicResource? StaticResource должен работать для установки стиля. - person Charlie; 19.04.2010
comment
Стиль находится в отдельном модуле (используя CAL), поэтому для его использования мне нужно указать DynamicResource. - person Rob Buhler; 21.04.2010
comment
Так что в основном это еще не решено ... Я тоже хотел получить ответ. - person Paul-Sebastian Manole; 15.06.2013