我正在使用来自hardcodet的TaskbarIcon
申请。当我激活CustomTrayPopup
时,我希望我的CustomTextBox
能够得到关注。 xaml中的正常方式似乎不起作用。
这是我的代码:
<UserControl [...]>
<Grid x:Name="Grid">
<Border [...]>
[...]
</Border>
<TextBox [...]
FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}"
> [...]
<TextBox.Template>
[...]
</TextBox.Template>
</TextBox>
<ListBox [...]>[...]
</ListBox>
</Grid>
</UserControl>
调用TextBox
时,是否有某种方法可以使TrayPopup
自动对焦?如果xaml或代码背后无关紧要。
更新1:
我的CustomTextBox
由Button
和TextField
组成。这是我的TextBox.Template
<ControlTemplate>
<Border [...]>
<VisualStateManager.VisualStateGroups>[...]
</VisualStateManager.VisualStateGroups>
<DockPanel>
<Button [...]>
<Image [...]/>
<Button.Style>[...]
</Button.Style>
</Button>
<ScrollViewer Margin="0"
x:Name="PART_ContentHost"/>
</DockPanel>
</Border>
</ControlTemplate>
是否可能FocusManager
无法处理TextBox
内的按钮?
更新2:
我在OnClick
内为Button
添加了CustomTextBox
方法,其中所有文本都已选中,PART_ContentHost
得到了关注。但是当我尝试使用OnLoaded
方法或其他方法时,它不起作用。
更新3: 这是我的TextBox的完整模板,如果它很重要。
<TextBox KeyDown="SearchBox_KeyDown"
x:Name="SearchBox"
Width="160"
Height="20"
Margin="10,10,150,130"
SnapsToDevicePixels="True"
OverridesDefaultStyle="True"
Foreground="#FFFFFFFF"
Text="Some"
>
<TextBox.CaretBrush>
<SolidColorBrush Color="#FF997137"/>
</TextBox.CaretBrush>
<TextBox.Template>
<ControlTemplate>
<Border x:Name="Border"
Margin="1"
CornerRadius="2"
BorderThickness="0,0,0,1.5"
BorderBrush="#FF997137">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="Disabled">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
<EasingColorKeyFrame KeyTime="0"
Value="#FF8f8f8f"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="ReadOnly">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
<EasingColorKeyFrame KeyTime="0"
Value="#FF4b4b4b"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="MouseOver"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<DockPanel>
<Button BorderThickness="0"
DockPanel.Dock="Left"
HorizontalAlignment="Right"
Height="15"
Width="15"
Background="#00ffffff"
Click="Button_Click">
<Image Source="/Resources/searchIco.png"
Margin="2"
Stretch="Fill"/>
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#00ffffff"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
<ScrollViewer Margin="0"
x:Name="PART_ContentHost"/>
</DockPanel>
</Border>
</ControlTemplate>
</TextBox.Template>
</TextBox>
答案 0 :(得分:0)
您可以使用IsVisibleChanged
事件来关注TextBox
。这不仅在View或Usercontrol加载时设置焦点,而且如果您通过Visibility更改Views也是如此。如果您尝试通过Loaded事件设置它,则在隐藏和显示的情况下可能不会触发事件。因此,在VisibilityChange上更改控件的焦点非常有用,因为它始终会触发。
以下是通过UserControl
中的代码设置Focus对文本框的示例public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
this.IsVisibleChanged += UserControl1_IsVisibleChanged;
}
void UserControl1_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
txt.Focus();
//txt is the name of the TextBox which is to be focused
}
}