我有一个简单的用户控件,其中包含一个图像,其源代码基于父级(可能是另一个UC或窗口)中的属性进行更改。在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,IMAGEON和国家都在UC的所有依赖属性。 UC没有设置DataContext,所以它应该继承父级。我想要做的是类似于UC中的状态绑定到窗口的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>
我能得到什么,但是,是一个错误,说在“对象”“”主窗口没有发现“国家”财产”,所以它似乎正在结合‘在UC国家’从字面上,而不是将其分配给Window的DualState属性。有人能够对我在做什么错了一些见解吗?
如果我通过代码或XAML(作为布尔值)在UC上设置状态属性,它工作正常。国家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是窗口的属性。由于错误显示'State'属性没有在'对象'''MainWindow'上找到,因此DataContext是正确的(即,它正在查看窗口)。问题在于它寻找的是'国家'而不是'双重国家' – user7134019