2012-09-14 64 views
3

我有一个按钮,它的内容(文本)通过下面的支持属性的样式动态设置。如何通过XAML设置WPF超链接文本

<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> 

有没有办法通过一个风格还是动态设置超链接的文本(inline或一些其他的标签)?

我一直无法通过XAML访问它。我得到它与超链接内的文本块上的常规绑定一起工作,但这实际上是在viewmodel上创建了一个冗余属性。

回答

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> 
7

您可以嵌入另一个TextBlock的超链接内,并将其绑定:

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

这是不太我所需要的。我想避免直接从ViewModel上的字符串属性绑定超链接中的文本。 – Ads

+0

@广告你确定你想要一个按钮内的超链接?这将是一个非常奇怪的用户界面。你会有一个可以点击的按钮,里面有一个可以单独点击的超链接。 –

+0

是的,我的要求是让它像一个超链接(没有导航网址,模仿按钮)。重新定义控制模板去除按钮外观,我只给了按钮一个支持方法(使用mvvm和caliburn.micro)。感谢您的textblock建议,点击我的解决方案。 – Ads

-2

考虑:

<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)); 
0
<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>