2017-09-13 84 views
0

我創建了一個自定義複選框,使用內部具有圖像和標籤的UserControl。我想在每次點擊時選中Checked和Unchecked圖像。 到目前爲止,我試着做以下WPF綁定返回靜態資源作爲字符串

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

我有一個名爲StateImage

public String StateImage 
{ 
    get 
    { 
     return is_checked?"{StaticResource Checked}":"StaticResource Unchecked"; 
    } 
} 

我的代碼不能正常工作性質和我落得這樣做是這樣的:

public String StateImage 
    { 
     get 
     { 
      return is_checked?"/Resources/Images/Checked.png":"/Resources/Images/Unchecked.png"; 
     } 
    } 

is_checked變量在UserControl的MouseDown事件下修改

有沒有一種更簡單的方法,我可以調用圖像,而無需編寫整個路徑和文件名?

+0

您可以隨時溝'UserControl'並創建一個基於'Checkbox'一個自定義的控制,具有不同的圖像特性爲每個狀態並通過'ControlTemplate.Triggers'交換圖像。但是,這個建議與你的問題有點相似,所以我覺得現在不應該是一個完整的答案。 – grek40

+1

你甚至不需要自定義控件。一個適當的複選框樣式就足夠了。 – Clemens

+0

我是WPF的新手,我很難分析控件模板。這就是爲什麼我使用了我感覺舒適的方法。但我想,除了研究如何覆蓋他們的默認模板外,沒有別的辦法。 –

回答

1

你可以在UserControl定義資源strings

<UserControl x:Class="WpfApplication1.UserControl1" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300" 
      xmlns:s="clr-namespace:System;assembly=mscorlib"> 
    <UserControl.Resources> 
     <s:String x:Key="Checked">pic.png</s:String> 
     <s:String x:Key="UnChecked"></s:String> 
    </UserControl.Resources> 
    <Grid Background="Yellow"> 
     <Image Source="{Binding StateImage}"/> 
    </Grid> 
</UserControl> 

private bool is_checked; 
public String StateImage 
{ 
    get 
    { 
     return is_checked ? Resources["Checked"] as string : Resources["UnChecked"] as string; 
    } 
}