在禁用的网格中启用特定按钮

6

我有一个按钮,它在一个包含许多其他按钮和控件的网格中,就像这样:

<Grid IsEnabled="false">
    <Grid.ColumnsDefinition>
        <ColumnDefinition/>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnsDefinition>
    <Button Content="Run"/>
    <Button Grid.Column="1" Content="Test"/>
    <Button Grid.Column="2" Content="Cancel" IsEnabled="true"/>
</Grid>

正如您所看到的,网格被禁用,但其中的取消按钮应该是启用的。

我遇到的问题是,即使我设置了内部按钮为启用状态,它仍然保持禁用状态,可能是因为其父级被禁用。

有没有办法覆盖此行为并强制启用该按钮?

我将其用于后台运行长时间进程的情况,因此除了取消进程之外,所有UI操作都应该被禁用。

谢谢!

1个回答

4

不设置IsEnabled属性或将其设置为false会导致所有嵌套的可视元素都被禁用。我们应该把元素的内容看作是它存在的一部分。禁用元素意味着禁用它的所有部分。

最简单的解决方法是更改标记以满足您的需求。我建议将取消按钮从这个Grid中移出来,这样它就不会受到GridIsEnabled属性的影响。


3
我带来的代码示例只是我拥有的一个更复杂 UI 结构的简化版本。我知道你提供的解决方案可以工作,但这意味着我需要处理许多其他同级控件的启用和禁用,这对于一个简单的请求来说会很繁琐。我想知道是否还有其他解决方案。谢谢! - Dror
@Dror 你找到这个问题的解决方案了吗? - Nambukarthy
抱歉,那时已经过去了将近10年。我不记得这个问题是否解决了。 - Dror
我有一种感觉,那就是通过 EvAlex 提到的繁琐路径。 - Dror

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接