2017-02-27 35 views
1

我試圖創建一個觸發器,它在VisibilityCollapsed時從選項卡導航中刪除TextBlock當可見性被摺疊時阻止切換到TextBlock

這是風格:

<Style x:Uid="Style_1" TargetType="TextBlock"> 
    <Setter x:Uid="Setter_1" Property="TextOptions.TextFormattingMode" Value="{StaticResource TextFormattingMode}"/> 
    <Setter x:Uid="Setter_32" Property="TextOptions.TextRenderingMode" Value="{StaticResource TextRenderingMode}"/> 
    <Setter x:Uid="Setter_2" Property="TextBlock.FontFamily" Value="{StaticResource FontFamily}"/> 
    <Setter x:Uid="Setter_3" Property="SnapsToDevicePixels" Value="True"/> 
    <Setter x:Uid="Setter_4" Property="VerticalAlignment" Value="Center"/> 
    <Setter x:Uid="Setter_74" Property="UseLayoutRounding" Value="True"/> 
    <Setter x:Uid="Setter_5" Property="Foreground" Value="{StaticResource LabelForeground}"/> 
    <Setter x:Uid="Setter_7" Property="FontSize" Value="{StaticResource FontSize}"/> 
    <Style.Triggers> 
     <DataTrigger x:Uid="DataTrigger_2" Binding="{Binding Source={x:Static cs:ZoomLevel.Instance}, Path=ActualZoomLevelIsDefault}" Value="False"> 
      <Setter x:Uid="Setter_33" Property="TextOptions.TextFormattingMode" Value="Ideal"/>      
     </DataTrigger> 
     <DataTrigger x:Uid="DataTrigger_100" Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Visibility}" Value="Collapsed"> 
      <!--<Setter Property="IsEnabled" Value="False"/>--> 
      <!--<Setter Property="Control.IsTabStop" Value="False"/>--> 
      <Setter Property="KeyboardNavigation.TabNavigation" Value="None"/> 
      <Setter Property="KeyboardNavigation.IsTabStop" Value="False"/> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

但仍的TextBlock獲得的焦點,如果我標籤到它。當我將注意力集中到TextBlock時,IsKeyboardFocusWithin爲true。我可以在我的觸發器中將IsEnabled設置爲false以使其工作,但我想知道爲什麼附加屬性不起作用。所以我的問題是:爲什麼KeyboardNavigation屬性不起作用?

例子:

<TextBlock x:Uid="TextBlock_2" Grid.Column="1" Grid.Row="1" Margin="3,3,0,0" HorizontalAlignment="Right" Visibility="Collapsed">   
     <Hyperlink x:Uid="Hyperlink_2" Command="{Binding SelectRoutingMethods}"> 
      <Run x:Uid="Run_2" Text="{Binding ContactPreferences}"/> 
     </Hyperlink> 
</TextBlock> 

TextBlock的是tabable但仍然在我的例子中可見。

+0

如何摺疊的TextBlock獲得焦點 – mm8

+0

?我也想知道爲什麼會發生這種情況...... – Sybren

+0

Collapse TextBlock is not visible,so not can happen。 – mm8

回答

1

這不是你的TextBlock重點。它是超鏈接。我不知道爲什麼,它甚至不在Visual Tree中,但它確實如此。這看起來像一個錯誤。如果您將其屬性Focusable設置爲false,則不再需要關注焦點。

這裏完成簡單的例子:

<Window.Resources> 
     <Style TargetType="TextBlock"> 
     <Setter Property="Focusable" Value="True" /> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Visibility}" Value="Collapsed"> 
      <Setter Property="Focusable" Value="False"/> 
      </DataTrigger> 
     </Style.Triggers> 
     </Style> 
    </Window.Resources> 
    <Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <TextBox>Temp</TextBox> 
    <TextBlock Visibility="Visible" Grid.Row="1"> 
     <Hyperlink Focusable="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=TextBlock}, Path=Focusable}" Command="{Binding AddOptionalAddressCommand}">test</Hyperlink> 
    </TextBlock> 
    <TextBox Grid.Row="2" >Temp</TextBox> 
    </Grid> 
0

如回答@Shadowed,這是Hyperlink所獲得Focus。不知道爲什麼會發生這種情況,因爲Content如果父母處於Collapsed狀態,則不應獲得Focus

無論如何,我可以給你解決這個問題。

<StackPanel> 
    <StackPanel.Resources> 
     <local:VisibilitytoFocusConverter x:Key="VisibilitytoFocusConv" /> 
    </StackPanel.Resources> 
    <TextBox >Temp</TextBox> 
    <TextBlock Visibility="Collapsed" Height="20" KeyboardNavigation.TabNavigation ="{Binding Visibility, RelativeSource={RelativeSource Self}, Converter={StaticResource VisibilitytoFocusConv}}"> 
     <Hyperlink Command="{Binding AddOptionalAddressCommand}" /> 
    </TextBlock> 
    <TextBox >Temp</TextBox> 
</StackPanel> 

轉換器:

public class VisibilitytoFocusConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo language) 
    { 
     return ((Visibility)value) == Visibility.Visible ? "Local" : "None"; 
    } 
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo language) 
    { 
     return new NotFiniteNumberException(); 
    } 
} 

希望有所幫助。

0

致信@Shadowed用於查找超鏈接問題。

這裏是我的可選擇性的解決方案:設置HyperlinkKeyboardNavigation.IsTabStop基於下一個UIElement能見度達樹(這將是TextBlock在這種特殊情況下

<Hyperlink x:Uid="Hyperlink_2" KeyboardNavigation.IsTabStop="{Binding IsVisible,RelativeSource={RelativeSource AncestorType={x:Type UIElement}}}">