hmmm小さなテストプロジェクトで問題を再現しようとしましたが、私にとってはうまくいきました。だから、あなたのuserControlsの構築方法についてもっと詳しく説明しなければならないでしょう。ここでは私のためにどのような作品です:
私は(いつものように、単にアプリケーションとウィンドウのファイル、)空のプロジェクトを作成し、私の窓で2列のグリッドを設定します。ユーザーコントロールを作成し、その後
<Window x:Class="Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
Name="Window"
SizeToContent="WidthAndHeight">
<Grid Name="MyGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
</Grid>
</Window>
それは、WPFのテキストボックスクラスを拡張:
<TextBox x:Class="Test.MyTextBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
</TextBox>
と:
System.Windowsを使用して、 using System.Windows.Controls;
namespace Test
{
public partial class MyTextBox : TextBox
{
public static readonly DependencyProperty CaptionProperty =
DependencyProperty.Register("Caption", typeof(string), typeof(MyTextBox), new UIPropertyMetadata(""));
public string Caption
{
get { return (string)GetValue(CaptionProperty); }
set { SetValue(CaptionProperty, value); }
}
public MyTextBox()
{
InitializeComponent();
}
}
}
これは基本的に "キャプション" dpのテキストボックスです。
と今の後ろに私のウィンドウのコードで:
public MainWindow()
{
InitializeComponent();
MyTextBox tb = new MyTextBox { Caption = "_Foo", Width = 100 };
Label lb = new Label { Content = tb.Caption + ":", Target = tb };
MyGrid.Children.Add(lb);
MyGrid.Children.Add(tb);
Grid.SetColumn(lb, 0);
Grid.SetColumn(tb, 1);
}
、これと、私はALT + Fを押すと(私も「フー」のFの下に_を見ることができTBに焦点を当てるのですか)ラベルだけを押すALTで
だから私はあなたの問題は、あなたのUserControlで自分自身とそれらがどのように構築されている(例えば、どのようなテンプレート)
編集関係していると思います:
を
コントロールが既存のコントロールを拡張していない場合、には WPFコントロールが含まれている場合は、おそらくFocusメソッドに問題があります。コントロール自体にフォーカスが当たったときに、コントロールの右側にフォーカスを設定するFocus()メソッドを追加する必要があります。 (あなたは、インスタンスのためのフォーカスを取得したいテキストボックスを含むユーザーコントロール用)
コード:
public partial class MyTextBox : TextBox
{
public static readonly DependencyProperty CaptionProperty =
DependencyProperty.Register("Caption", typeof(string), typeof(MyTextBox), new UIPropertyMetadata(""));
public string Caption
{
get { return (string)GetValue(CaptionProperty); }
set { SetValue(CaptionProperty, value); }
}
public MyTextBox()
{
InitializeComponent();
}
protected override void OnGotFocus(RoutedEventArgs e)
{
TextBoxPart.Focus();
}
}
背後
<TextBox x:Class="Test.MyTextBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Content="foo" Grid.Column="0" />
<TextBox Name="TextBoxPart" Grid.Column="1" />
</Grid>
</TextBox>
コード編集2: 私は一度問題がありましたフォーカスをdataGridCellのサブコントロールに転送するには、次のようにします。
<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter TargetName="TextBoxPart" Property="FocusManager.FocusedElement" Value="{Binding ElementName=TextBoxPart}" />
</Trigger>
</ControlTemplate.Triggers>
これをテンプレートに追加できます。これはあなたのフォーカスを正しく転送する必要があります。
、アクセシビリティのためとして、私はこれが役立つとは思わないが、私はあなたが欲しいものを達成するための任意の方法が表示されない: -/
を使用することができますXAMLのコントロールを 'ラップする'ことができます(つまり、カスタムコントロールを作成する必要はありません)。私は仕事の後で今日の例を投稿します。 – Dennis