2013-10-28 89 views
1

我正嘗試在WPF中創建一個圖像按鈕。我所做的是在模板綁定中未解決的相對路徑WPF

  1. 創建一個從Button繼承的用戶控件,並在其中聲明一個應該具有所需圖像的依賴屬性。
  2. 在資源字典中爲其聲明xaml模板。
  3. 傳遞該依賴項屬性的相對路徑和完整路徑,完整路徑有效,但相對不完整。

用戶控件類

public class ButtonWithImage : Button 
{ 

    public ImageSource ButtonImage 
    { 
     get { return (ImageSource)GetValue(ButtonImageProperty); } 
     set { SetValue(ButtonImageProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for ButtonImage. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty ButtonImageProperty = 
     DependencyProperty.Register("ButtonImage", typeof(ImageSource), typeof(ButtonWithImage)); 


} 

資源字典代碼

<Style x:Key="ButtonWithImageStyle" TargetType="complaintRegister:ButtonWithImage"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="complaintRegister:ButtonWithImage"> 
       <StackPanel> 
        <Image Source="{Binding ButtonImage, RelativeSource={RelativeSource TemplatedParent}}" Width="50" Height="50"/> 
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/> 
       </StackPanel> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

XAML

<complaintRegister:ButtonWithImage x:Name="ButtonAdd" Content="Add New Complaint" Style="{StaticResource ButtonWithImageStyle}" 
              ButtonImage="Resources\Plus.png" 
              Width="150" Height="75" Margin="10 0" Command="{Binding NewCommand}"> 

     </complaintRegister:ButtonWithImage> 

錯誤

它確實顯示在設計模式中的圖像,但在運行時拋出該異常

Cannot locate resource 'resources/plus.png' 

我不禁想它正試圖解決「資源/ plus.png」而不是'Resources/Plus.png。

回答

3

我敢打賭,在輸出窗口中顯示一個綁定錯誤。 :)

如何您發佈我們的錯誤信息在這裏。

順便說一句,在這種情況下,它更適合使用TemplateBinding而不是RelativeSource TemplatedParent。

TemplateBinding是讓我們這樣說,指定在控件的模板中很好地工作。 :)

檢查這些鏈接了:

http://msdn.microsoft.com/en-us/library/ms742882(v=vs.110).aspx

http://www.codeproject.com/Tips/599954/WPF-TemplateBinding-with-ControlTemplate

編輯:

唉唉你談論你的圖像的位置。

默認情況下,使用XAML指定其Source屬性時,Image控件僅識別已編譯的資源圖像。但是,我們可以使用轉換器或自定義標記擴展來實現此目標。以下鏈接包含有關數據綁定轉換器和標記擴展的信息。

因此設置PNG建設行動 - >資源,重建您的解決方案或使用這樣的:如果你想使用MVVM在此,改變路徑基於數據

<Image> 
    <Image.Source> 
     <BitmapImage UriSource="../Relative/Path/To/Image.png" /> 
    </Image.Source> 
</Image> 

雖然我建議你使用綁定:

<Image Source="{Binding MyPath}" Height="50"... /> 
+0

我已經更新了我的問題中的錯誤,請仔細閱讀。它永遠不會運行,但會有例外。 – MegaMind

+0

嗨,你正在談論圖像位置。請閱讀我的編輯。 –

+0

這對我有幫助。謝謝 –

相關問題