2012-09-14 61 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>