2012-03-01 39 views
0

在我目前的项目我有一个WPF TreeView和添加的项目是这样的:如何以编程方式替换TreeViewItem的图标?

<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的文字,使它看起来像这样的:

enter image description here

有一种简单的方法以编程方式更换图标以及一个TreeViewItem的文本或我通过子项的整个树遍历? (不幸的是我是一个新手WPF,我比较习惯好老的WinForms)

回答

1

要更改图像的源和文字块的文字,你可以给控制这样一个名字:

<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> 

当然,您需要额外的逻辑来确定状态,但这会让您开始。

+0

这一个已经做了伎俩,非常感谢。向所有回复投票。 – beta 2012-03-01 12:12:56

1

您可以将图像源实际绑定到ViewModel中的字符串属性,而不是对图像路径进行硬编码。字符串属性需要表示要显示的图像的URI。一旦你改变了字符串属性(并且触发了OnPropertyChanged事件),你的UI将自动改变图像。 WPF有一个内置的图像转换器,所以你不应该担心太多。以下是您的绑定应该如何的样子:

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

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

希望有所帮助。

1

你如何生成树?有没有数据绑定? 如果树是人工建造的,为什么你不只是要更改的元素赋予的名字,然后在代码中引用这些元素:

<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 = "....; 

对于图像源,则需要生成它(文字是不够的): 新的BitmapSource(新的URI(“图像URI”))

你应该建构一次,并将它缓存。

相关问题