C# 从子触发器设置父可见属性
我有一个UserControl,用于在DataGrid上显示加载动画。当找到数据时,我结束 通过设置可见性来创建动画。为UserControl折叠。此操作有效 然而,我想能够显示“没有记录发现”的消息了。所以我在UserControl中添加了一个文本框,并绑定了它的可见性属性。当没有数据时,此属性隐藏加载动画(矩形)并显示文本框。当这种情况发生时,我还为TextBox添加了动画 缺少的关键部分是如何将Usercontrol设置回可见。一旦文本框动画结束,就会折叠,这样我就可以在下一次数据搜索中重用整个内容 我的用户控件:C# 从子触发器设置父可见属性,c#,wpf,C#,Wpf,我有一个UserControl,用于在DataGrid上显示加载动画。当找到数据时,我结束 通过设置可见性来创建动画。为UserControl折叠。此操作有效 然而,我想能够显示“没有记录发现”的消息了。所以我在UserControl中添加了一个文本框,并绑定了它的可见性属性。当没有数据时,此属性隐藏加载动画(矩形)并显示文本框。当这种情况发生时,我还为TextBox添加了动画 缺少的关键部分是如何将Usercontrol设置回可见。一旦文本框动画结束,就会折叠,这样我就可以在下一次数据搜索中重
<UserControl x:Class="MyProject.LoadingControl"
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"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:MyProject"
mc:Ignorable="d" d:DesignHeight="100" d:DesignWidth="110">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<StackPanel.Triggers>
<EventTrigger RoutedEvent="Rectangle.Loaded">
<BeginStoryboard>
<Storyboard Name="waitingAnimation" RepeatBehavior="Forever">
<DoubleAnimation Storyboard.TargetName="R1" BeginTime="0:0:0.05" Storyboard.TargetProperty="Opacity" From=".1" To="1" AutoReverse="True" Duration="0:0:0.3"/>
<DoubleAnimation Storyboard.TargetName="R2" BeginTime="0:0:0.1" Storyboard.TargetProperty="Opacity" From=".1" To="1" AutoReverse="True" Duration="0:0:0.3"/>
<DoubleAnimation Storyboard.TargetName="R3" BeginTime="0:0:0.15" Storyboard.TargetProperty="Opacity" From=".1" To="1" AutoReverse="True" Duration="0:0:0.3"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</StackPanel.Triggers>
<Rectangle Name="R1" Fill="#FF909595" Opacity=".1" Width="12" Height="8">
<Rectangle.Style>
<Style TargetType="Rectangle">
<Setter Property="Visibility" Value="Visible"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding No_records}" Value="true">
<Setter Property="Visibility" Value="Collapsed"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Rectangle.Style>
</Rectangle>
<Rectangle Name="R2" Fill="#FF909595" Opacity=".1" Width="12" Height="8" Margin="2,0,0,0">
<Rectangle.Style>
<Style TargetType="Rectangle">
<Setter Property="Visibility" Value="Visible"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding No_records}" Value="true">
<Setter Property="Visibility" Value="Collapsed"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Rectangle.Style>
</Rectangle>
<Rectangle Name="R3" Fill="#FF909595" Opacity=".1" Width="12" Height="8" Margin="2,0,0,0">
<Rectangle.Style>
<Style TargetType="Rectangle">
<Setter Property="Visibility" Value="Visible"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding No_records}" Value="true">
<Setter Property="Visibility" Value="Collapsed"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Rectangle.Style>
</Rectangle>
<TextBox Name="txt" Text="No records found" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="16" FontWeight="Bold" FontFamily="Segoe Print" BorderBrush="Black" Padding="3" >
<TextBox.Style>
<Style TargetType="TextBox">
<Setter Property="Visibility" Value="Collapsed"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding No_records}" Value="True">
<Setter Property="Visibility" Value="Visible"></Setter>
</DataTrigger>
<Trigger Property="Visibility" Value="Visible">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0" AutoReverse="True" BeginTime="0:0:0" Duration="0:0:1" RepeatBehavior="0:0:4"/>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Duration="0:0:1" BeginTime="0:0:4.5" >
<DiscreteObjectKeyFrame Value="{x:Static Visibility.Hidden}" KeyTime="0:0:1"></DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</StackPanel>
</UserControl>
用户控件在视图中的设置如下:
<loading_ctl:LoadingControl Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="{Binding LoadingControl_visible}"/>
如何将Visible.Collapsed从子文本框触发器设置为parent UserControl?如前所述,我在代码隐藏中使用情节提要的已完成事件解决了我的问题:
public partial class LoadingControl : UserControl
{
public LoadingControl()
{
InitializeComponent();
var story=(Storyboard)this.FindResource("story");
story.Completed += new EventHandler(Story_Completed);
}
private void Story_Completed(object sender, EventArgs e)
{
this.Visibility = Visibility.Collapsed;
}
}
在情节提要或其中一个动画(DoubleAnimation、ObjectAnimationUsingKeyFrames)中设置完成的处理程序。在处理程序中,在动画结束时执行所需的操作。此用户控件是自定义控件吗?然后我希望它具有依赖属性,您可以将文本可见性绑定到其他地方。一般建议:查看MVVM,它将使您的软件架构更易于概述和支持。想象一下另一个人,他必须弄清楚文本是如何被某个儿童用户控件隐藏的…@EldHasp,谢谢。这实际上是可行的。我们只希望使用xaml解决方案,但似乎无法实现。@Sinatr,是的,是一个自定义控件。我正在使用MVVM。但在这种情况下,我看不出依赖属性对我有什么帮助。除此之外,只要我的ViewModel中有“No_records”属性,我就不需要依赖性属性-UserControl仍然有效,因为它在同一个视图上,具有相同的DataContext。“我正在使用MVVM”-您不需要:
Get_data()
在视图模型中直接操作控件?还有一点要批评的是,你没有遵循命名准则。我建议您与MVVM专家建立一个联系,以便更好地了解它。
public partial class LoadingControl : UserControl
{
public LoadingControl()
{
InitializeComponent();
var story=(Storyboard)this.FindResource("story");
story.Completed += new EventHandler(Story_Completed);
}
private void Story_Completed(object sender, EventArgs e)
{
this.Visibility = Visibility.Collapsed;
}
}