按钮在UserControl中禁用自身

时间:2014-05-07 11:19:30

标签: c# wpf

情况很简单:我有一个WaitingBar的WPF UserControl 女巫的能见度很高。所以问题是当Control设置为visible时,“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>

1 个答案:

答案 0 :(得分:3)

啊......再一次,有人加入这个网站,问另外一个问题基本上是说' .NET中的东西不起作用'。与此同时,所有这些问题的真实情况是,虽然.NET 实际中的一些东西不起作用......我们几乎可以依赖它们所有的工作绝大多数时间。

因此,您的答案与此处提出类似问题的所有人的答案相同...... Button not UserControl中禁用其自身(除非您停用UserControl),因为他们不这样做......唯一可能的答案就是你已经禁用了它。很难向您显示您的错误,因为您没有包含所有相关代码(但请不要再添加)。

我可能会猜测,您可能已将IsEnabled属性设置为false事件处理程序中的Loaded或类似内容。它不能在ApplicationButtonStyle中,因为IsEnabled上的true属性设置为Button会覆盖它。如果您以编程方式设置Button.Command属性,那么您的CanExecute方法可能始终返回false

在一天结束时,这确实是你的错误和你需要解决的问题。这里没有任何人可以帮助你进一步帮助你。您只需要仔细查看项目中使用此Button的内容,在某个阶段,您将找到它。请记住...... Button默认情况下不要禁用它们。


更新&gt;&gt;&gt;

嗯,你说你已经尝试了所有这些并没有帮助',但是由于你的问题仍然存在,你显然没有。我保证您的代码会禁用Button。为了证明这一点,只需添加另一个Button ...清楚,它将不会被禁用。

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