Как я могу ссылаться во время выполнения на статические ресурсы в WPF? - PullRequest
3 голосов
/ 05 декабря 2010

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

Это мой код XAML:

  <TreeView Margin="17,22" Name="TreeView">
                <TreeView.Resources>
                    <BitmapImage x:Key="Icon1" UriSource="pack://application:,,,/icon1.ico"/>
                    <BitmapImage x:Key="Icon2" UriSource="pack://application:,,,/icon2.ico"/>
                </TreeView.Resources>
                <TreeView.ItemTemplate>
                    <HierarchicalDataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Image Source="{StaticResource Icon1}" Margin="0,0,5,0" Width="16" Height="16"/>
                            <TextBlock Text="{Binding Name}" Margin="0,2,0,0" FontWeight="Normal" FontSize="11"/>
                        </StackPanel>
                    </HierarchicalDataTemplate>
                </TreeView.ItemTemplate>
            </TreeView>

Что такоеправильный синтаксис для привязки источника изображения, чтобы я мог выбрать во время выполнения, какое статическое изображение будет отображаться?

Ответы [ 2 ]

2 голосов
/ 05 декабря 2010

Вы уже связываете с некоторым свойством Name. Расширьте вашу (view-) модель целочисленным свойством Icon, которое определяет с помощью Icon, что вы хотите отображаться для этой записи. Тогда вы можете использовать триггер:

<Image Margin="0,0,5,0" Width="16" Height="16">
    <Image.Style>
        <Style TargetType="{x:Type Image}">
            <Setter Property="Source" Value="{StaticResource Icon1}" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Icon}" Value="2">
                    <Setter Property="Source" Value="{StaticResource Icon2}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Image.Style>
</Image>
0 голосов
/ 05 декабря 2010

Вы имеете в виду код-позади?В выделенном фрагменте кода вы можете сказать

BitmapImage b = (BitmapImage)TreeView.FindResource("Icon1");

и затем присвоить его любому нужному свойству.

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