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