2012-09-27 2 views
1

나는 xaml에서 이와 비슷한 것을했습니다.wpf의 코드 뒤에서 트리거를 통해 이미지 소스를 설정하는 방법

<Image.Style> 
      <Style TargetType="Image"> 
       <Setter Property="Source" Value="../Images/FolderImage.png" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=img, Path=IsEnabled}" 
                      value="False"> 
         <Setter Property="Source" Value="../Images/FolderImage_Disabled.png" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Image.Style> 

코드에서 동일한 것을 구현하고 싶습니다.

Style imgStyle = new Style(); 

     imgStyle.TargetType = typeof(Image); 

     Setter imgSetter = new Setter(); 
     imgSetter.Property = Image.SourceProperty; 
     imgSetter.Value = bmpImg; 
     imgStyle.Setters.Add(imgSetter); 

     disabledImage = new BitmapImage(); 
     disabledImage.BeginInit(); 
     disabledImage.UriSource = new Uri("pack://application:,,,/../Images/FolderImage_Disabled.png"); 
     disabledImage.EndInit(); 

     DataTrigger trg = new DataTrigger(); 
     Binding trgBinding = new Binding(); 
     trgBinding.ElementName = "img"; 
     trgBinding.Path = new PropertyPath("IsEnabled"); 
     trg.Value = false; 
     trg.Binding = trgBinding; 
     imgStyle.Triggers.Add(trg); 

     imgSetter = new Setter(); 
     imgSetter.Property = Image.SourceProperty; 
     imgSetter.Value = disabledImage; 
     trg.Setters.Add(imgSetter); 
     menuIcon.SetValue(Image.StyleProperty, imgStyle); 

내가 어떤 도움이 여기에 이해할 수있을 것이다

"System.Windows.Data Error: 4 : Cannot find source for binding with 
    reference 'ElementName=img'. BindingExpression:Path=IsEnabled; DataItem=null; 
    target element is 'Image' (Name='img'); target property is 'NoTarget' (type 'Object')" 

은 VS 출력에 다음과 같은 오류가 발생합니다 : 나는 다음과 같은 짓을했는지!

답변

2

왜 그렇게하고 싶지는 모르지만 바인딩 소스를 설정해보십시오.

tryBinding.Source = this; 

다른 방법을 생각해 볼 수 있습니다. 속성의 세터의 양방향 모드

  • 값에 따라 화상의 소스를 변경 -
    • 는 IMG의 IsEnabled 속성에 대한 속성이 그
    • 바인딩 코드 숨김 부울 속성을 만들 .
  • +0

    로딩 시간을 줄이기 위해 xaml 부분을 코드 뒤에 이동해야했습니다. 그리고 당신 말이 맞습니다 ... 시간이 부족해서, 나는 맹목적으로 xaml을 따라갔습니다. 올바른 방법을 보여 주셔서 감사합니다 :) 감사합니다 :) – Alerter

    관련 문제