私はカスタムテンプレートコントロールを作成しました。私はそれを私の電卓アプリケーションの「ディスプレイ」として使用しています。それはControl
クラスから直接継承しますが、私はそれをユーザーのクリックでフォーカス可能にする方法を見つけることができません。私はOnGotFocus
メソッドをオーバーライドしていますが、それは決して解雇されません。UWPテンプレートコントロールのフォーカスが得られません
クリックの振る舞いに焦点を当てるためにはいくつかのプロパティが必要だと思いますが、見つけられませんでした。
私はTapped
イベントまたはOnTapped
メソッドを使用することができますが、それは私が必要とするものではありません。ここで
はGeneric.xamlで私のコードです:
<Style TargetType="controls:ResponsiveTextBox">
<Setter Property="Background" Value="{StaticResource PageBackgroundBrush}"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0,0,0,2"/>
<Setter Property="HorizontalContentAlignment" Value="Right"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="VerticalAlignment" Value="Stretch"/>
<Setter Property="Padding" Value="10"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="controls:ResponsiveTextBox">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="PointerOver">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="BorderElement" Storyboard.TargetProperty="BorderBrush">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseLowBrush}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Active">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="BorderElement" Storyboard.TargetProperty="BorderBrush">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAccentBrush}"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="BorderElement2" Storyboard.TargetProperty="BorderBrush">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlBackgroundBaseLowBrush}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border x:Name="BackgroundElement"
Background="{TemplateBinding Background}"
Margin="{TemplateBinding BorderThickness}"
Opacity="{ThemeResource TextControlBackgroundRestOpacity}"
/>
<Border x:Name="BorderElement"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
/>
<Border x:Name="BorderElement2"
BorderBrush="Transparent"
BorderThickness="{TemplateBinding BorderThickness}"
/>
<TextBlock x:Name="TextElement"
Text="{TemplateBinding Text}"
Foreground="{TemplateBinding Foreground}"
FontSize="{TemplateBinding FontSize}"
Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
AutomationProperties.AccessibilityView="Raw"
/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
タップでフォーカスを処理すると何が問題になりますか?これは 'TextBox'の実装の中でどのように行われるのでしょうか。また、 'Control'ではなく' TextBox'を継承することができれば、独自のフォーカスロジックを実装する必要はありません。 –
'TextBox'から継承していましたが、[選択]を完全に無効にできませんでした(https://i-msdn.sec.s-msft.com/en-us/windows/uwp/input-and)。私は自分のコントロールを作成することにしたので、TextBoxをタップするたびにそこに点滅していた電話機の-devices/images/select-word.png) –
そして、Tappedイベントの実装では、Tappedイベントでは 'this.Focus(FocusState.Pointer); 'を呼び出すべきだと思いますか?私はそれがその行動を可能にするいくつかのプロパティを設定することによって自動的にフォーカスを得ることができると考えていた... –