我有一个自定义用户控件,它公开了两个依赖属性,IsBusy
并且BusyText
.
我想要的是当 IsBusy 设置为 true 时控件出现...这是用户控件的 xaml
<UserControl x:Class="MyNamespace.BusyDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:MyNamespace"
Height="Auto"
Width="Auto"
x:Name="busyControl">
<Grid Panel.ZIndex="10">
<Border Opacity=".2">
<Border.Background>
<RadialGradientBrush>
<GradientStop Color="#FF000000" Offset="0.59"/>
<GradientStop Color="#FFB6B6B6" Offset="0"/>
</RadialGradientBrush>
</Border.Background>
</Border>
<Border VerticalAlignment="Center"
HorizontalAlignment="Center"
BorderThickness="2"
BorderBrush="Gray">
<TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType=controls:BusyDialog},
Path=BusyText}"
Opacity="1"
Margin="20,10,20,10"/>
</Border>
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="Visibility" Value="Hidden"/>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType=controls:BusyDialog},Path=IsBusy}" Value="True">
<Setter Property="Opacity" Value=".3" />
<Setter Property="IsEnabled" Value="False" />
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
</Grid>
这是后面的代码
public partial class BusyDialog : UserControl
{
#region Dependency Properties
public string BusyText
{
get { return (string)GetValue(BusyTextProperty); }
set { SetValue(BusyTextProperty, value); }
}
public bool IsBusy
{
get{ return (bool)GetValue(IsBusyProperty); }
set { SetValue(IsBusyProperty, value); }
}
public static readonly DependencyProperty IsBusyProperty =
DependencyProperty.Register(
"IsBusy",
typeof(bool),
typeof(BusyControl),
new FrameworkPropertyMetadata(
false,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public static readonly DependencyProperty BusyTextProperty =
DependencyProperty.Register(
"BusyText",
typeof(string),
typeof(BusyControl),
new FrameworkPropertyMetadata(
string.Empty,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
#endregion
public BusyDialog ()
{
InitializeComponent();
}
}
这是我在视图中创建用户控件:
<localControls:BusyDialog x:Name="busyControl"
Grid.Row="0"
IsBusy="{Binding IsWorking}"
BusyText="{Binding WorkingText}">
</localControls:BusyDialog>
我的代码有什么问题吗?每当我在 ViewModel 中设置 IsWorking 属性时,控件都不会按预期显示!
我还尝试像这样设置用户控件绑定:
<UserControl x:Class="MyNamespace.BusyDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:MyNamespace"
Height="Auto"
Width="Auto"
x:Name="busyControl">
<Grid Panel.ZIndex="10">
<Border Opacity=".2">
<Border.Background>
<RadialGradientBrush>
<GradientStop Color="#FF000000" Offset="0.59"/>
<GradientStop Color="#FFB6B6B6" Offset="0"/>
</RadialGradientBrush>
</Border.Background>
</Border>
<Border VerticalAlignment="Center"
HorizontalAlignment="Center"
BorderThickness="2"
BorderBrush="Gray">
<TextBlock Text="{Binding ElementName=busyControl, Path=BusyText}"
Opacity="1"
Margin="20,10,20,10"/>
</Border>
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="Visibility" Value="Hidden"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=busyControl,Path=IsBusy}" Value="True">
<Setter Property="Opacity" Value=".3" />
<Setter Property="IsEnabled" Value="False" />
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
</Grid>