2016-05-20 100 views
-1

我遇到了WPF的一些問題,我想知道是否有人知道我應該嘗試下一步。所以基本上我有一個處理窗口,它綁定到一個字符串列表,並且每個窗口都獲得一個ListBox中的圖像。WPF圖片更新

我到目前爲止的代碼如下。

<ListBox x:Name="MyListBox" ItemsSource="{Binding Items}" Margin="36,100,320,100" SelectedIndex="0" Panel.ZIndex="1" MouseDoubleClick="MyListBox_MouseDoubleClick"> 
     <ListBox.Resources> 
      <BitmapImage x:Key="checkmark" UriSource="Images/checkmark.gif" /> 
      <BitmapImage x:Key="failure" UriSource="Images/red-x.gif" /> 
      <BitmapImage x:Key="processing" UriSource="Images/processing.gif" /> 
      <BitmapImage x:Key="white" UriSource="Images/white.gif" /> 
     </ListBox.Resources> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <Image Source="{DynamicResource white}" /> 
        <TextBlock Text="{Binding}" /> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

我試過以下多個在線文章,但我似乎無法將我的資源從白色更改爲任何其他鍵。所以我認爲我的下一步是將動態資源指向一個決定每個對象狀態的類,但我似乎無法得到它來更新任何圖像。

我已經試過 MyListBox.SelectedItem = MyListBox.FindResource("checkmark"); MyListBox.InvalidateArrange(); MyListBox.UpdateLayout();

和一堆別人的,但它似乎並沒有做太多。 我是WPF的新手,所以我爲新手問題表示歉意,但任何幫助或推動正確的方向將是非常有幫助的。提前致謝。

回答

0

您可以使用DataTemplate上的DataTriggerTrigger更改圖像源。如果您使用DataTrigger,則需要另一個屬性以保存要顯示的圖像的名稱以及要綁定的文本。例如:

 <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <StackPanel.Resources> 
        <BitmapImage x:Key="checkmark" UriSource="Images/checkmark.gif" /> 
        <BitmapImage x:Key="failure" UriSource="Images/red-x.gif" /> 
        <BitmapImage x:Key="processing" UriSource="Images/processing.gif" /> 
        <BitmapImage x:Key="white" UriSource="Images/white.gif" /> 
       </StackPanel.Resources> 
       <Image x:Name="image" Source="{StaticResource white}" /> 
       <TextBlock Text="{Binding Text}" />      
      </StackPanel> 
      <DataTemplate.Triggers> 
       <Trigger Property="IsChecked" Value="True"> 
        <Setter Property="Source" TargetName="image" Value="{StaticResource checkmark}"/> 
       </Trigger> 
       <DataTrigger Binding="{Binding ImageToShow}" Value="failure"> 
        <Setter Property="Source" TargetName="image" Value="{StaticResource failure}"/> 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 

欲瞭解更多信息,請看MSDN doc

+0

這是非常有用的非常感謝你! – Xander

+0

樂於助人。我知道如何開始一個新的語言/框架可能會令人沮喪。 – evanb