WPF UserControl从父窗口触发

时间:2017-08-10 10:35:21

标签: c# wpf xaml

我在其父窗口的框架内有一个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命令?

1 个答案:

答案 0 :(得分:0)

  

...但是当EditButton在父窗口中时可以这样做吗?

不,不是因为ButtonTextBox属于不同的命名范围。

  

我的理解是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