2010-10-07 23 views
10

मैं एक WPF एप्लिकेशन डाल रहा हूं जिसमें मेरे पास एक छवि नियंत्रण है जिसे मैं अपने दृश्य मॉडल से कस्टम कमांड ऑब्जेक्ट को बांधना चाहता हूं जो छवि पर क्लिक होने पर निष्पादित होगा। मैंने अपने दृश्य मॉडल से कमांड ऑब्जेक्ट का खुलासा किया है और इसे छवि नियंत्रण में बांधने की आवश्यकता है।WPF छवि कमांड बाध्यकारी

क्या यह आदेश ऑब्जेक्ट को छवि नियंत्रण में बांधना संभव है? यदि ऐसा है तो किसी भी सलाह की सराहना की जाएगी।

<Button Command="{Binding MyCommand}"> 
    <Image Source="myImage.png" /> 
</Button> 

आप मानक बटन क्रोम नहीं करना चाहते हैं, जैसे कुछ के साथ बटन के टेम्पलेट बदलने के लिए:

+0

सुनिश्चित नहीं है कि इसका मतलब क्या है? बाध्य होने पर आप छवि को क्या करना चाहते हैं? –

उत्तर

16

आप एक बटन में छवि रखा, और आदेश के लिए बटन बाध्य करने की जरूरत है कि:

<ControlTemplate x:Key="tplFlatButton" TargetType="{x:Type Button}"> 
    <Border Width="{TemplateBinding Width}" 
      Height="{TemplateBinding Height}" 
      Background="{TemplateBinding Background}" 
      BorderBrush="{TemplateBinding BorderBrush}" 
      BorderThickness="{TemplateBinding BorderThickness}"> 
     <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
          VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
          TextElement.Foreground="{TemplateBinding Foreground}" 
          TextElement.FontFamily="{TemplateBinding FontFamily}" 
          TextElement.FontSize="{TemplateBinding FontSize}" 
          TextElement.FontStretch="{TemplateBinding FontStretch}" 
          TextElement.FontWeight="{TemplateBinding FontWeight}"/> 
    </Border> 
</ControlTemplate> 

ध्यान दें कि आप भी अन्यथा टेम्पलेट ऊपर डिफ़ॉल्ट बटन पृष्ठभूमि और सीमा का उपयोग करेगा, डिफ़ॉल्ट बटन शैली ओवरराइड करने के लिए अन्य गुणों को बदलने की आवश्यकता होगी:

<Style x:Key="stlFlatButton" TargetType="{x:Type Button}"> 
    <Setter Property="Background" Value="{x:Null}" /> 
    <Setter Property="BorderBrush" Value="{x:Null}" /> 
    <Setter Property="BorderThickness" Value="0" /> 
    <Setter Property="Template" Value="{StaticResource tplFlatButton}" /> 
</Style> 
+0

धन्यवाद एक लाख, एक इलाज किया। – David

11

यह एक बटन का उपयोग कर से बचने और का प्रयोग कर एक Hyperlink बजाय आसान हो सकते हैं:

<TextBlock DockPanel.Dock="Top"> 
    <Hyperlink Command="{Binding SomeCommand}"> 
     <Image Source="image.png" /> 
    </Hyperlink> 
</TextBlock> 

ध्यान दें कि यह डिफ़ॉल्ट पाठ सजावट के साथ हाइपरलिंक प्रस्तुत करना होगा, ताकि आप एक शैली जोड़ना चाहें, कि निकालता है कि - युक्त तत्व के संसाधन शब्दकोश में इस डाल चाल करना होगा: @Robert Rossney से जवाब का

<Style x:Key={x:Type Hyperlink}" TargetType="Hyperlink"> 
    <Setter Property="TextDecorations" 
      Value="{x:Null}" /> 
</Style> 
4

सरलीकृत संस्करण:

<TextBlock> 
    <Hyperlink Command="{Binding SomeCommand}" TextDecorations="{x:Null}"> 
     <Image Source="{StaticResource image.png}" Width="16" /> 
    </Hyperlink> 
</TextBlock> 

छवि शामिल करना सबसे अच्छा तरीका एक {StaticResource x} उपयोग करने के लिए, को देखने के WPF image resources

13

यहाँ अभी तक एक और समाधान मैं व्यक्तिगत रूप से समय की सबसे उपयोग करने के लिए अगर मैं एक और नियंत्रण में यह enclosing के बिना आदेश के साथ एक छवि चाहते प्यार है।

<Image Source="Images/tick.png" Cursor="Hand" Tooltip="Applies filter"> 
    <Image.InputBindings> 
      <MouseBinding Gesture="LeftClick" Command="{Binding ApplyFilter, Mode=OneTime}" /> 
    </Image.InputBindings> 
</Image> 

मैं उसके गुण Hand और Tooltip सेट इतना है कि यह अधिक स्पष्ट है कि यह एक एक्शन और नहीं एक स्थिर छवि है।

+0

जहां तक ​​मैं देख सकता हूं, यह समाधान पहले से ही आदेश को निष्पादित करता है जब माउस बटन दबाया जाता है। मैं उम्मीद करता हूं कि माउस बटन जारी होने पर निष्पादन शुरू हो जाएगा। एक बटन के व्यवहार की तरह। बस एक टिप्पणी! – Florian

+1

@ फ्लोरियन धन्यवाद, मैंने यह ध्यान नहीं दिया। मैं आमतौर पर कुछ क्लिक करने के बीच में नहीं रुकता हूं। –

संबंधित मुद्दे