OnPropertyChange(null) 使超链接消失

代码优先(TextBox为了这个问题简化了上层):


<TextBlock

                Style="{StaticResource  FieldNameStyle }"

                TextWrapping ="Wrap" Height="33" FontSize="12"

                Visibility="Visible"

                TextAlignment="Center"

                Foreground="#FFFFFF"

                Opacity="0.5"                                      

                Text="{Binding UnderLineMsg}">      


                <Hyperlink  Name="PrivacyNoticeLink2"                                 

                Command="{Binding OpenPrivacyNoticeCommand}">   

                    <TextBlock 

                        Visibility="Visible"

                        Name="privacyNoticeText2"

                        Text="{Binding PrivacyNoticeButtonLabel,FallbackValue='privacy notice' ,UpdateSourceTrigger=PropertyChanged}"/>                        

                </Hyperlink> 

            </TextBlock>

这是第一次加载窗口后的样子:在 msg 填充符下:链接


窗口中的事件之一触发对


OnPropertyChanged(null);

该方法在窗口中订阅它的所有成员中触发“刷新”:


 UpdateSourceTrigger=PropertyChanged

一旦被调用,超链接元素就会完全消失(使用 Snoop 2.8 验证),因此调用后它将如下所示: 在 msg 填充符下:


我不知道为什么会这样。当前的修复方法是用OnPropertyChanged许多特定的方法替换一般调用,但从长远来看这不是一个现实的选择。


编辑: 将问题隔离到一个新项目中,注意当它只有一个文本块中的一个文本块时,问题仍然会发生


带有触发 OnPropertyChanged 的按钮的简单 XAML


<Grid>

        <Button Click="Meh"   Margin="171,37,153,199">

            PRESS ME

        </Button>


        <TextBlock  Name="WrapperText" Text= "{Binding randomNumber}">


                <TextBlock  Name="linkText" Text="{Binding randomNumStr }"></TextBlock>


        </TextBlock>

</Grid>

后面的代码:


public MainWindow()

    {

        DataContext = new Stuff();

        InitializeComponent();


    }


请注意我触发属性更改的真正令人作呕的方式。我知道我应该在“Stuff”类中使用 Icommand,但我想快速隔离问题。在我的原始代码中,它已正确完成。


阿波罗的战车
浏览 197回答 1
1回答

冉冉说

不要绑定 a 的Text属性TextBlock,你也添加了 aHyperlink到。引发PropertyChanged源属性的事件将清除Hyperlink.您可以向其添加一个元素,而不是绑定自身的Text属性:TextBlockRun<TextBlock&nbsp; &nbsp; TextWrapping ="Wrap" Height="33" FontSize="12"&nbsp; &nbsp; Visibility="Visible"&nbsp; &nbsp; TextAlignment="Center"&nbsp; &nbsp; Foreground="#FFFFFF"&nbsp; &nbsp; Opacity="0.5">&nbsp;&nbsp;&nbsp; &nbsp; <Run Text="{Binding UnderLineMsg, Mode=OneWay}" />&nbsp; &nbsp; <Hyperlink&nbsp; Name="PrivacyNoticeLink2" Command="{Binding OpenPrivacyNoticeCommand}">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <TextBlock&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Visibility="Visible"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Name="privacyNoticeText2"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Text="{Binding PrivacyNoticeButtonLabel,FallbackValue='privacy notice' ,UpdateSourceTrigger=PropertyChanged}"/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; </Hyperlink>&nbsp;</TextBlock>
打开App,查看更多内容
随时随地看视频慕课网APP