我在其父窗口的框架内有一个UserControl。在usercontrol中,我有一个文本框,需要在切换父窗口上的按钮时进行编辑。
我正在尝试使用触发器 UserControl.xaml
<UserControl.Resources>
<ResourceDictionary>
<Style x:Key="TextBoxEdit" TargetType="TextBox">
<Setter Property="IsReadOnly" Value="True" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=EditButton}" Value="True">
<Setter Property="IsReadOnly" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<TextBox
x:Name="EditTextBox"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Style="{StaticResource TextBoxEdit}"
Text="Edit me" />
</Grid>
当usercontrol中有一个名为EditButton的按钮时,这可以正常工作,但当EditButton在父窗口中时是否可以这样做?
MainWindow.xaml
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<ToggleButton x:Name="EditButton" HorizontalAlignment="Center" VerticalAlignment="Top">Edit</ToggleButton>
<Frame Grid.Row="1" Source="Home.xaml" />
</Grid>
我的理解是usercontrol的数据上下文将从父窗口继承,因此可以像绑定到按钮的触发器一样简单,还是必须使用viewmodel / button命令?
答案 0 :(得分:0)
...但是当EditButton在父窗口中时可以这样做吗?
不,不是因为Button
和TextBox
属于不同的命名范围。
我的理解是usercontrol的数据上下文将从父窗口继承,因此可以像绑定到按钮的触发器一样简单,还是必须使用viewmodel / button命令?
您应该将IsChecked
的{{1}}属性绑定到视图模型的source属性,然后将触发器绑定到相同的source属性:
ToogleButton
确保视图模型正确实现<DataTrigger Binding="{Binding IsChecked}" Value="True">
...
接口:https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx