부모 (다른 UC 또는 Window 일 수 있음)의 속성을 기반으로 소스를 변경하려는 이미지가 포함 된 간단한 사용자 정의 컨트롤이 있습니다. 이터 : UC의 단순화 된 버전이wpf 사용자 정의 컨트롤을 부모 속성에 바인딩
<UserControl x:Class="Test.Controls.DualStateButton" ... x:Name="root">
<Grid>
<Image Height="{Binding Height, ElementName=root}" Stretch="Fill" Width="{Binding Width, ElementName=root}">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Setter Property="Source" Value="{Binding ImageOff, ElementName=root}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding State}" Value="True">
<Setter Property="Source" Value="{Binding ImageOn, ElementName=root}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</Grid>
</UserControl>
높이처럼, 폭, ImageOff, 이미지 온, 그리고 국가는 UC의 모든 종속성 속성이 보인다. UC에는 DataContext가 설정되어 있지 않으므로 부모를 상속해야합니다. 내가하려고하는 것은 UC의 State가 Window의 DualState 속성에 바인딩되어있는 다음과 같은 것입니다.
<Window x:Class="Test.MainWindow" DataContext="{Binding RelativeSource={RelativeSource Self}}">
...
<Grid>
<local:DualStateButton State="{Binding DualState}" Height="100" ImageOff="{StaticResource ButtonUp}" ImageOn="{StaticResource ButtonDown}" Width="100"/>
</Grid>
</Window>
내가 무엇을 얻을 그러나, '국가'속성은 '객체' ''MainWindow를 찾을 수 없습니다한다는 오류입니다 ', 그래서 바인딩 복용 보인다'문자 그대로가 아니라 UC의 상태 ' 윈도우의 DualState 속성에 할당합니다. 누군가 내가 잘못하고있는 것에 대해 통찰력을 줄 수 있습니까?
UC에서 상태 속성을 코드 또는 XAML (bool 값)로 설정하면 올바르게 작동합니다. 주 DP는 다음과 같이 정의됩니다.
public static readonly DependencyProperty StateProperty =
DependencyProperty.Register("State", typeof(bool), typeof(DualStateButton),
new PropertyMetadata(false));
public bool State
{
get { return (bool)GetValue(StateProperty); }
set { SetValue(StateProperty, value); }
}
데이터 형식이 작동하려면 바인딩이되어야합니까?
DualState 속성은 무엇입니까? DualState는 Window의 속성입니까? 아니면 다른 뷰 모델의 속성입니까? – loopedcode
FindAncestor를 찾으십시오. – Mafii
예, DualState는 window 속성입니다. 오류는 'State'속성이 'object' ''MainWindow '에 없기 때문에 DataContext가 정확합니다 (예 : 창을보고있는 것). 문제는 그것이 'DualState'가 아닌 'State'를 찾고 있다는 것입니다. – user7134019