2012-06-28 34 views
20

Có thể, để đặt lấy nét tự động vào hộp văn bản trong tệp xaml của tôi không?Làm cách nào để đặt lấy nét tự động chỉ trong xaml?

<Window x:Class="WpfApplication1.Views.Test1" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      Height="100" 
      Width="210" 
      WindowStartupLocation="CenterOwner" 
      ShowInTaskbar="False" 
      Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" 
      ResizeMode="CanResizeWithGrip"> 
    <TextBox HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Visible" TextWrapping="Wrap" AcceptsReturn="True" Text="{Binding Path=Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
</Window> 

Trả lời

17
<TextBox FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}" /> 
+0

Cảm ơn, đó là những gì tôi đang tìm kiếm – David

+3

Tôi không biết tại sao nhưng điều này không hiệu quả đối với tôi. Tuy nhiên, gợi ý khác đặt thuộc tính đính kèm này trong header với Binding to ElementName làm việc cho tôi. Không có ràng buộc, nó ném một ngoại lệ. – newman

+1

Vì một số lý do không hoạt động khi 'Hộp văn bản' không phải là điều khiển duy nhất trong cửa sổ. –

13

có bạn có thể sử dụng FocusManager.FocusedElement tài sản gắn liền.

FocusManager.FocusedElement="{Binding ElementName=textBox1}" 
+2

có được bất kỳ cách nào, để làm điều này mà không có tên? – David

5

thử somethind như thế này

<Window x:Class="WpfApplication18.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="500" Width="525" FocusManager.FocusedElement="textcontrol"> 
    <Grid> 
     <TextBox Name="textcontrol" /> 
    </Grid> 
</Window> 
+3

có cách nào không, để thực hiện điều này mà không có tên? – David

+1

FocusManager.FocusedElement = "{Binding ElementName = textcontrol}" – anevil

-6

tôi thường giải quyết này với C#

textBox1.Focus(); 

Tôi nghĩ rằng đó là cách tốt nhất làm thế nào để làm điều này.

+0

đó là một cách bẩn để giải quyết vấn đề ... – David

+1

Giải pháp này rất đơn giản, dễ đọc và rõ ràng. –

+3

@ColonelPanic có, nhưng đó không phải là những gì được hỏi ở đây. –

4

Tôi nghĩ rằng ràng buộc là một overkill, tham khảo là nhẹ hơn:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     FocusManager.FocusedElement="{x:Reference textBox1}"> 
    <StackPanel> 
     <TextBox x:Name="textBox1" /> 
    </StackPanel> 
</Window> 
+0

Có thực sự bất kỳ sự khác biệt hiệu suất giữa điều này và ràng buộc? – CodeHxr