【问题标题】:How do you set WPF Hyperlink text via XAML如何通过 XAML 设置 WPF 超链接文本
【发布时间】:2012-09-07 05:29:34
【问题描述】:

我有一个按钮,它的内容(文本)通过样式对支持属性进行动态设置,如下所示。

<Button>
   <Button.Style>
      <Style>
         <Setter Property="Button.Content" Value="Advanced Search" />
         <Style.Triggers>
            <DataTrigger Binding="{Binding Path=IsAdvancedSearch}" Value="True">
               <Setter Property="Button.Content" Value="Standard Search" />
            </DataTrigger>
         </Style.Triggers>
      </Style>
   </Button.Style>
</Button>

我需要更改此按钮以仅显示具有相同动态文本的超链接。像这样:

<Button>
   <Button.Template>
      <ControlTemplate>
         <TextBlock>
            <Hyperlink>
               Standard Search
            </Hyperlink>
         </TextBlock>
      </ControlTemplate>
   </Button.Template>
</Button>

还有没有办法通过样式动态设置超链接的文本(内联或其他标签)?

我无法通过 XAML 访问它。我让它在超链接内的文本块上使用普通绑定,但这确实在视图模型上创建了一个冗余属性。

【问题讨论】:

    标签: wpf xaml mvvm


    【解决方案1】:

    您可以在您的超链接中嵌入另一个 TextBlock 并绑定它:

    <TextBlock>
        <Hyperlink>
            <TextBlock Text="{Binding LinkText}" />
        </Hyperlink>
    </TextBlock>
    

    【讨论】:

    • 这不是我所需要的。我想避免直接从 ViewModel 上的字符串属性绑定超链接中的文本。
    • @Ads 您确定要在按钮内添加超链接吗?那将是一个非常奇怪的 UI。你会有一个可以点击的按钮,里面有一个可以单独点击的超链接。
    • 是的,我的要求是让它像一个超链接(没有导航 url,模仿一个按钮)。重新定义控制模板去掉了按钮的外观,我只给了按钮一个支持方法(使用 mvvm 和 caliburn.micro)。感谢您的文本块建议,点击我的解决方案。
    【解决方案2】:

    解决方案是简单地将样式应用于内部文本块。

                <Button x:Name="SwitchSearchType">
                    <Button.Template>
                        <ControlTemplate>
                            <TextBlock>
                                <Hyperlink>
                                    <Hyperlink.Inlines>
                                        <TextBlock>
                                            <TextBlock.Style>
                                                <Style>
                                                    <Setter Property="TextBlock.Text" Value="Advanced Search" />
                                                    <Style.Triggers>
                                                        <DataTrigger Binding="{Binding Path=IsAdvancedSearch}" Value="True">
                                                            <Setter Property="TextBlock.Text" Value="Standard Search" />
                                                        </DataTrigger>
                                                    </Style.Triggers>
                                                </Style>
                                            </TextBlock.Style>
                                        </TextBlock>
                                    </Hyperlink.Inlines>
                                </Hyperlink>
                            </TextBlock>
                        </ControlTemplate>
                    </Button.Template>
                </Button>
    

    【讨论】:

      【解决方案3】:
       <GridViewColumn Header="{x:Static lang:Lang.wName}"  CellTemplate="{StaticResource Template_DebitAccount}" />
      
      And use into skin file 
      
      <DataTemplate x:Key="Template_DebitAccount">
          <Border Padding="3" >
              <TextBlock Text="{Binding wDebitAccountName}" Style="{StaticResource TextStyle_Path}">
                  <TextBlock.InputBindings>
                      <MouseBinding MouseAction="LeftClick" Command="{Binding DataContext.Base_PopPageCommand , RelativeSource={RelativeSource AncestorType=ListView}}" >
                          <MouseBinding.CommandParameter>
                              <MultiBinding Converter="{StaticResource MultiValueBindingConverter}">
                                  <Binding Source="AgentSummary" />
                                  <Binding Path="Link_Text"/>
                              </MultiBinding>
                          </MouseBinding.CommandParameter>
                      </MouseBinding>
                  </TextBlock.InputBindings>
              </TextBlock>
          </Border>
      </DataTemplate>
      

      【讨论】:

        【解决方案4】:

        给定:

        <Hyperlink x:Name="uriEmailAddress" Click="Hyperlink_Click"></Hyperlink>
        

        代码:

        string e = Properties.Settings.Default.Email;
        uriEmailAddress.NavigateUri = new Uri("mailto:" + e);
        InlineCollection ic = uriEmailAddress.Inlines;
        ic.Add(new Run(e));
        

        【讨论】:

          猜你喜欢
          • 2010-09-13
          • 1970-01-01
          • 2012-02-03
          • 2018-05-20
          • 2011-08-22
          • 1970-01-01
          • 2018-08-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多