Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF,C#可见性=可见,不透明度=1,元素未显示_C#_Wpf_Events_Data Binding - Fatal编程技术网

WPF,C#可见性=可见,不透明度=1,元素未显示

WPF,C#可见性=可见,不透明度=1,元素未显示,c#,wpf,events,data-binding,C#,Wpf,Events,Data Binding,问题: 运行程序时,如何以及为什么在元素上设置Opacity=1和Visibility=Visible,然后获得Opacity=0和Visibility=Collapsed 说明: 我有一个我写的问卷库。问题必须有答案依赖项 如果AnswerRequired设置为false,问题将淡出(Visibility=collapsed,Opacity=0) 在一个应用程序中,我有一个使用日期选择器的DateQuestion <wpfQuestionnaire:DateQuestion Ques

问题:

运行程序时,如何以及为什么在元素上设置
Opacity=1
Visibility=Visible
,然后获得
Opacity=0
Visibility=Collapsed

说明:

我有一个我写的问卷库。问题必须有
答案
依赖项

如果
AnswerRequired
设置为false,问题将淡出(
Visibility=collapsed
Opacity=0

在一个应用程序中,我有一个使用日期选择器的
DateQuestion

<wpfQuestionnaire:DateQuestion
  QuestionNumber="15.2"
  AnswerDate="{Binding LastPregnant, Mode=TwoWay}"/>
所有问题都从
QuestionBase
中撤销,该库包含事件和处理程序
AnswerRequiredChanged+=OnAnswerRequiredChanged

onanswerrequired相应地更改了调用
FadeIn
FadeOut

FadeIn
如下所示:

public void FadeIn(UIElement element)
 {
         element.Visibility = Visibility.Visible;
         var fade = new DoubleAnimation
         {
             From = 0,
             To = 1,
             Duration = TimeSpan.FromSeconds(0.5),
             FillBehavior = FillBehavior.Stop
         };

         fade.Completed += delegate
         {
             element.Opacity = 1;
             element.Visibility = Visibility.Visible;
             Debug.WriteLine(QuestionNumber + " Visibility : " + Visibility + " | opacity : " + Opacity);
         };

         Storyboard.SetTarget(fade, element);
         Storyboard.SetTargetProperty(fade, new PropertyPath(OpacityProperty));

         var sb = new Storyboard();
         sb.Children.Add(fade);

         sb.Begin();
 }
为了进行调试,我在动画完成时编写问题编号、
Visibility
Opacity
。下面是我将第一个问题的日期设置为从今天起不到一年的日期时的日志示例:

15.1 Visibility : Visible | opacity : 1
15.1 Visibility : Visible | opacity : 1
15.2 Visibility : Visible | opacity : 1
15.2 Visibility : Visible | opacity : 1
15.5 Visibility : Visible | opacity : 1
15.5 Visibility : Visible | opacity : 1
15.3 Visibility : Visible | opacity : 1
请注意,
15.3
具有
可见性:可见|不透明度:1
,但它不会显示在程序中,使用Snoop检查告诉我它具有
可见性=折叠
不透明度=0

所有其他问题都会像预期的那样淡入淡出

有什么想法吗


更新

我向
IsVisibleChanged+=OnVisibleChanged添加了一个处理程序

private void OnVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    var q = sender as QuestionBase;
    if(q.QuestionNumber == "15.3")
        Debug.WriteLine(q.QuestionNumber +
        " VISIBILITY CHANGED TO " +
        e.NewValue +
        " | Property :" + e.Property);
}
当它在init上隐藏时,我得到了这个:

15.3 VISIBILITY CHANGED TO False| Property :IsVisible
15.3 Faded Out
设置我获得的日期时:

15.3 Areq changed to : True // from OnAnswerRequiredChanged
15.3 Visibility : Visible | opacity : 1 // from FadeIn
但是,
OnVisibleChanged
未被激发! 我将
FadeIn
中的
debug.WriteLine
更改为肯定我正在编写
元素的值


那么,如何在不提高
IsVisibleChanged
的情况下获得
15.3可见性:Visible
呢?请尝试展开主窗口。xaml的框架MinHeight=“500”MinWidth=“700”
如果您的元素在未显示的框架之外,请尝试展开主窗口。xaml的框架MinHeight=“500”MinWidth=“700”
如果您的元素在未显示的框架之外

您是否尝试在依赖项属性设置器中设置断点并跟踪其更改?如果snoop显示要折叠的值,则绑定属性的值在xaml呈现之前的某个位置发生了很大变化。请注意,调试输出不显示
元素。可见性
元素。不透明度
,而是拥有
FadeIn
方法的类实例的
可见性
不透明度
属性的值。@Clemens,谢谢。但它们应该是一样的。我用
this
@Jinish调用它,我将尝试在那里抛出一些断点。感谢您的建议您是否尝试在依赖项属性设置程序中设置断点并跟踪其更改?如果snoop显示要折叠的值,则绑定属性的值在xaml呈现之前的某个位置发生了很大变化。请注意,调试输出不显示
元素。可见性
元素。不透明度
,而是拥有
FadeIn
方法的类实例的
可见性
不透明度
属性的值。@Clemens,谢谢。但它们应该是一样的。我用
this
@Jinish调用它,我将尝试在那里抛出一些断点。谢谢你的建议
15.3 Areq changed to : True // from OnAnswerRequiredChanged
15.3 Visibility : Visible | opacity : 1 // from FadeIn