繁体   English   中英

如何以编程方式替换TreeViewItem的图标?

[英]How to programmatically replace the icon of a TreeViewItem?

在我当前的项目中,我有一个WPF TreeView并添加了以下内容:

<TreeViewItem Name="treeViewItem6" IsEnabled="False">
  <TreeViewItem.Header>
    <StackPanel Orientation="Horizontal">
        <Image Height="16" Source="Images/16x16_green_lamp.png" Width="16" />
        <TextBlock Margin="5,0" Text="Status: Connected" />
    </StackPanel>
  </TreeViewItem.Header>
</TreeViewItem>

我想在我的C#代码中替换图标以及TextBlock的文本,以使其看起来像这样:

在此处输入图片说明

有没有一种简便的方法可以以编程方式替换TreeViewItem的图标以及文本,还是我必须遍历整个子项树? (不幸的是,我是WPF的新手,我更习惯于老式的WinForms)

要更改图像的来源和文本块的文本,可以为控件命名,如下所示:

<Image Name="imgIcon" Height="16" Source="Images/16x16_green_lamp.png" Width="16" />
<TextBlock Name="tbStatus" Margin="5,0" Text="Status: Connected" />

这样,您可以通过编程轻松更改要更改的属性,如下所示:

Image img = FindResource("red") as Image;
if (img != null) imgIcon.Source = img.Source;

tbStatus.Text = "Status: Disconnected";

要查找“绿色”和“红色”资源,可以将它们添加到XAML中,如下所示:

<Window.Resources>
    <Image x:Key="green" Source="Images/16x16_green_lamp.png" />
    <Image x:Key="red" Source="Images/16x16_red_lamp.png" />
</Window.Resources>

当然,您将需要其他逻辑来确定状态,但这将使您入门。

实际上,您可以将图像源绑定到ViewModel中的字符串属性,而不是对图像的路径进行硬编码。 string属性需要代表您要显示的图像的uri。 一旦更改了字符串属性(并触发OnPropertyChanged事件),您的UI就会自动更改图像。 WPF具有用于图像的内置转换器,因此您不必为此担心太多。 绑定的外观如下所示:

<Image Source="{Binding ImageSource}" />

其中ItemSource是视图模型中的字符串属性。

希望能有所帮助。

您如何生成树? 那里有数据绑定吗? 如果树是手动构建的,为什么不简单地给要更改的元素命名,然后在代码中引用这些元素:

<TreeViewItem Name="treeViewItem6" IsEnabled="False">
    <TreeViewItem.Header>
        <StackPanel Orientation="Horizontal">
            <Image x:Name="StatusImage" Height="16" Source="Images/16x16_green_lamp.png" Width="16" />
            <TextBlock x:Name="StatusText" Margin="5,0" Text="Status: Connected" />
        </StackPanel>
    </TreeViewItem.Header>
</TreeViewItem>

然后,在C#代码中:

...
this.StatusImage.Source="...";  // a new ima
this.StatusText.Text = "....;

对于图像源,您需要生成它(文本是不够的):new BitmapSource(new Uri(“ image uri”))

您应该构造一次并缓存它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM