DataTrigger для IconTemplate в RadWindow

У меня есть приложение WPF, и я использую Telerik. Я пытаюсь установить шаблон значка так, чтобы он имел значение по умолчанию, и только при определенном условии он привязывал источник изображения:

<telerik:RadWindow.Resources>
    <Style x:Key="CustomIconStyle" TargetType="Image">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=IsConditionMet, ElementName=MyWindow, UpdateSourceTrigger=PropertyChanged}" Value="True">
                <Setter Property="Source" Value="{Binding Path=IconImageSource, ElementName=MyWindow, UpdateSourceTrigger=PropertyChanged}"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</telerik:RadWindow.Resources>
<telerik:RadWindow.IconTemplate>
    <DataTemplate>
        <Image Style="{StaticResource CustomIconStyle}" Source="/MyAssembly;Component/Resources/myIcon.ico" Height="16" Margin="0,0,5,0"/>
    </DataTemplate>
</telerik:RadWindow.IconTemplate>

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


person Maya S    schedule 18.04.2016    source источник
comment
Ваш ответ помог мне разобраться в проблеме!! По какой-то причине после InitializeComponent элемента управления окно rad не меняет свою иконку. Когда я использовал конвертер, он работал, потому что он был вызван один раз. Мне все еще нужна привязка, поэтому я просто убедился, что логическое значение имеет правильное значение в первую очередь в конструкторе. опубликую свой ответ   -  person Maya S    schedule 18.04.2016
comment
У меня это есть, и я проверил с помощью другого элемента управления, что изменение свойства работает   -  person Maya S    schedule 18.04.2016


Ответы (2)


Вы можете использовать такие триггеры:

<telerik:RadWindow.Resources>
        <Style TargetType="Image" x:Key="Style1">
            <Setter Property="Source" Value="default.ico"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding MyCondition}" Value="true">
                    <Setter Property="Source" Value="custom.ico"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </telerik:RadWindow.Resources>
    <telerik:RadWindow.IconTemplate>
        <DataTemplate>
            <Image Style="{StaticResource Style1}" Height="16" Margin="0,0,5,0"/>
        </DataTemplate>
    </telerik:RadWindow.IconTemplate>
person Amine    schedule 18.04.2016

Итак, проблема заключалась в том, что после загрузки RadWindow не изменил значок. Решение:

<telerik:RadWindow.IconTemplate>
    <DataTemplate>
        <Image  Height="16" Margin="0,0,5,0">
            <Image.Style>
                <Style TargetType="{x:Type Image}">
                    <Setter Property="Source" Value="/MyAssembly;Component/Resources/myIcon.ico" />
                    <Style.Triggers>
                        <DataTrigger Value="True" Binding="{Binding Path=IsConditionMet, ElementName=MyWindow}">
                            <Setter Property="Source" Value="{Binding Path=IconImageSource, ElementName=MyWindow}"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Image.Style>
        </Image>
    </DataTemplate>
</telerik:RadWindow.IconTemplate>

Но хитрость заключается в том, чтобы задать правильное значение IsConditionMet в конструкторе Windows перед загрузкой. Спасибо всем за помощь.

person Maya S    schedule 18.04.2016