按钮在UserControl中禁用自己

本文关键字:自己 UserControl 按钮 | 更新日期: 2023-09-27 18:02:03

情况很简单:我有一个WaitingBar的WPF UserControl女巫的能见度受限。所以问题是'CancelButton'总是被禁用时,控制设置为可见。如果我删除可见性,绑定控件总是可见的,按钮是启用的。在Waitingbar的概述。Xaml按钮也被启用。怎么了?为什么按钮会自动禁用?

<UserControl x:Class="Neolant.Common.Ui.Wpf.Controls.WaitingBar"
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" mc:Ignorable="d"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:commonControls="clr-namespace:Neolant.Common.Ui.Wpf.Controls"
d:DataContext="{d:DesignInstance Type=commonControls:Waitor, IsDesignTimeCreatable=False}"
Visibility="{Binding Path=IsWaiting, Converter={StaticResource BooleanToVisibilityConverter}}"
IsHitTestVisible="False" >
<Grid
    HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
    <!-- Фон -->
    <Rectangle 
        Grid.Row="0" Grid.RowSpan="2"
        Fill="LightGray" Opacity="0.5"
        HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
    <StackPanel
        Orientation="Vertical"
        HorizontalAlignment="Center" VerticalAlignment="Center">
        <!-- Анимация -->
        <Canvas
            Grid.Row="0"
            x:Name="canvas"
            HorizontalAlignment="Center" VerticalAlignment="Center"
            Height="100" Width="100"
            RenderTransformOrigin="0.5, 0.5">
            <Canvas.Triggers>
                <EventTrigger RoutedEvent="Canvas.Loaded">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation 
                                Storyboard.TargetName="rotation" Storyboard.TargetProperty="Angle"
                                From="0" To="360" Duration="0:0:3" 
                                RepeatBehavior="Forever"/>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Canvas.Triggers>
            <Canvas.RenderTransform>
                <TransformGroup>
                    <RotateTransform x:Name="rotation" Angle="0"/>
                </TransformGroup>
            </Canvas.RenderTransform>
        </Canvas>
        <!-- Текст -->
        <TextBlock 
            Grid.Row="1"
            Text="{Binding Path=Text}"
            FontSize="20" 
            Foreground="SlateGray"
            Margin="5" 
            HorizontalAlignment="Center"/>
        <!-- Прогресс бар-->
        <ProgressBar
            Grid.Row="2"
            Height="25"
            Minimum="0"
            Maximum="100"
            Name="pbMain" 
            Visibility="Hidden" />
    </StackPanel>
    <!--Кнопка отмены-->
    <Button
        Grid.Row="0"
        x:Name="CancelButton" 
        Style="{StaticResource ApplicationButtonStyle}" 
        Width="50" 
        Height="50"
        Margin="0,0,0,62"
        IsEnabled="True">
        <Path Data="{StaticResource CloseIconGeometry}" />
    </Button>
</Grid>

按钮在UserControl中禁用自己

啊…再一次,有人加入这个网站问另一个问题,基本上是说"。net中的某些东西不工作"。与此同时,关于所有这些问题的真相是,虽然。net中有很少的东西实际上不起作用…我们几乎可以相信它们在绝大多数时间里都在工作。

因此,你的答案和这里所有问类似问题的人一样…ButtonUserControl中禁用自己(除非您禁用UserControl),因为它们不这样做…唯一可能的答案是你已经禁用了它。很难指出你的错误,因为你没有包括所有相关的代码(但请不要再添加了)。

我可以大胆猜测,也许,您已经将其IsEnabled属性设置为falseLoaded事件处理程序或类似的东西。它不能在ApplicationButtonStyle中,因为在Button上将IsEnabled属性设置为true会覆盖它。如果您以编程方式设置了Button.Command属性,那么也许您的CanExecute方法总是返回false ?

在一天结束的时候,这真的是你的错误,你的问题要解决。这里没有人能再帮你了。你只需要仔细查看你的项目,看看你用这个Button做了什么,在某个阶段,你会发现它。记住……默认情况下,Button不会禁用它们。

更新>>>

嗯,你说你已经"尝试了所有这些方法,但都没有帮助",但你的问题仍然存在,显然你没有。我保证是你的代码禁用了Button。为了证明这一点,只需添加另一个Button…显然,它不会被禁用。

试试这个…注释掉Button并尝试构建项目。如果在任何地方有任何对Button的引用,那么您将得到一个编译错误。如果没有编译错误,则可能有一个父容器控件,其IsEditable属性设置为True,从而禁用所有子控件。