2013-10-28 2 views
1

WPF에서 이미지 단추를 만들려고합니다. 내가 한 일은템플릿 바인딩에서 상대 경로가 해결되지 않음 WPF

  1. 단추에서 상속 된 사용자 정의 컨트롤을 만들고 필요한 이미지가 있어야하는 종속성 속성을 선언합니다.
  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' 

내가 도울 수 없어요이 예외를 throw하지만 '자원/plus.png'해결하려고하는 사고 'Resources/Plus.png'대신.

답변

3

출력 창에 바인딩 오류가 표시됩니다. :)

여기에 오류 메시지를 게시하는 것은 어떻습니까?

Btw, RelativeSource TemplatedParent 대신 TemplateBinding을 사용하는 것이 더 적합합니다.

TemplateBinding은 컨트롤의 템플릿에서 잘 작동하도록 지정되어 있습니다. :)

확인 해당 링크 아웃 :

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

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

편집 :

당신이 이미지의 위치에 대해 얘기 아.

기본적으로 Image 컨트롤은 XAML을 사용하여 Source 속성을 지정할 때 컴파일 된 리소스 이미지 만 인식합니다. 그러나이 목표를 달성하기 위해 변환기 또는 사용자 지정 태그 확장을 사용할 수 있습니다. 다음 링크에는 데이터 바인딩 변환기 및 태그 확장에 대한 정보가 들어 있습니다.

따라서 조치를 구축하는 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

이 도움이되었습니다. 감사 –

관련 문제