[英]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.