我正在使用 wpf 和 xaml 将可见性属性绑定到依赖项属性,但是当父对象折叠时绑定中断,我不知道为什么。如果我在父级崩溃并再次可见之后在代码中重新创建绑定,则该过程可以正常工作,但这很丑陋并且违背了绑定的目的。这是一个将重现该问题的小型 wpf 项目。
<Window x:Class="RibbonExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:r="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary"
Title="MainWindow" Height="350" Width="525" KeyDown="Window_KeyDown" KeyUp="Window_KeyUp">
<Grid>
<r:Ribbon Grid.Row="0" x:Name="xRibbon" Title="Ribbon Example">
<r:RibbonTab x:Name="View" Header="Tab" IsSelected="True">
<r:RibbonGroup Header="Visible">
<r:RibbonTextBox x:Name="xButton" Text="Visible Text" />
</r:RibbonGroup>
<r:RibbonGroup Header="Invisible" Visibility="{Binding VisibilityDependancy}">
<r:RibbonTextBox x:Name="xButton2" Text="{Binding VisibilityDependancy}" />
</r:RibbonGroup>
</r:RibbonTab>
</r:Ribbon>
</Grid>
</Window>
和代码隐藏。
using System.Windows;
using System.Windows.Input;
namespace RibbonExample
{
public partial class MainWindow : Window
{
public static readonly DependencyProperty VisibilityDependancyProperty =
DependencyProperty.Register("VisibilityDependancy", typeof(Visibility), typeof(MainWindow), new PropertyMetadata(Visibility.Collapsed));
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
private void Window_KeyDown(object sender, KeyEventArgs e)
{
SetValue(VisibilityDependancyProperty, Visibility.Visible);
}
private void Window_KeyUp(object sender, KeyEventArgs e)
{
SetValue(VisibilityDependancyProperty, Visibility.Collapsed);
}
}
}
要重现简单的窗口焦点,请按一个键,折叠的 RibbonGroup 应该变得可见,然后当您释放它时它将隐藏。如果通过双击选项卡标题“选项卡”折叠功能区,然后将其恢复,绑定将不再起作用,功能区组的可见性将保持在折叠功能区之前的任何状态。
有趣的是,如果您执行 IsEnabled 并将其设置为 true 或 false,则绑定不会中断,仅当您绑定功能区后面的可见性时。
谢谢