2017-09-13 3 views
0

イメージとラベル付きのUserControlを使用してカスタムチェックボックスを作成しました。私はそれをクリックするたびにCheckedとUncheckedの画像を交換したい。 これまでのところ、私は私のコードは動作しませんし、私はこのようにやってしまったStateImageWPFバインドStringとしてStaticResourceを返します

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

というプロパティ持って、次の

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

やってみました:

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

カスタムコントロールは必要ありません。適切なCheckBoxスタイルで十分です。 – Clemens

+0

私はWPFが新しく、コントロールテンプレートを解析するのが苦労しています。だからこそ、私は快適な方法を使いました。しかし、他の方法はありませんが、デフォルトのテンプレートをオーバーライドする方法を学ぶことだと思います。 –

答えて

1

あなたはUserControlstringsなどのリソースを定義することができます。

<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; 
    } 
} 
関連する問題