当子项出现错误时,使用户控件父项无效

本文关键字:用户 控件 无效 错误 | 更新日期: 2023-09-27 18:33:52

我创建了一个用作简单文件浏览器的用户控件。我希望看到的是,当文本框出现错误时,完整的用户控件设置为无效。

我认为应该可以仅使用 WPF 获得结果......

<UserControl x:Class="WorldGenerator.Controls.FileBrowseControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignWidth="300"
             xmlns:wg="clr-namespace:WorldGenerator.Controls"
             xmlns:v="clr-namespace:WorldGenerator.Validation">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <TextBox Grid.Column="0" Margin="0,0,10,0">
            <TextBox.Text>
                <Binding Path="FilePath">
                    <Binding.RelativeSource>
                        <RelativeSource AncestorType="wg:FileBrowseControl" Mode="FindAncestor"/>
                    </Binding.RelativeSource>
                    <Binding.ValidationRules>
                        <v:FileExistsValidationRule/>
                    </Binding.ValidationRules>
                </Binding>
            </TextBox.Text>
        </TextBox>
        <Button Grid.Column="1" Click="BrowseButton_OnClick" Content="Browse..."/>
    </Grid>
</UserControl>

编辑:这是FileBrowseControlWindow中的用法。

<Window>
    <FileBrowseControl/>
    <Button IsEnabled="{Binding BUT HOW DO I BIND TO FileBrowseControl.HasErrors?}"/>
</Window>

当子项出现错误时,使用户控件父项无效

可以通过

将"IsEnabled"属性设置为false ;例如,有一个名为 userControl 的用户控件。然后在文本框验证逻辑中IsEnabled可以将 userControl 的属性设置为 false

您的 xaml:

<UserControl x:Class="DataGridWpfApplication.UserControl1"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:DataGridWpfApplication"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300" Name="userControl">
    <Grid>            
    </Grid>
</UserControl>

在代码隐藏中,可以将IsEnabled属性设置为 false

private void SetIsEnabledProperty()
{
    userControl.IsEnabled = false;
}