2011-02-10 25 views
7

Chúng tôi có canvas tùy chỉnh có các nút chuyên biệt hoạt động rất giống với cửa sổ ứng dụng MDI chuẩn. Hành vi mong muốn là nếu bất kỳ điều khiển con nào của "cửa sổ" có tiêu điểm thì "cửa sổ" đó được cho là hoạt động.Làm cách nào để tôi có thể tạo kiểu cho một điều khiển tùy chỉnh dựa trên liệu bất kỳ con của nó có tập trung không?

Bây giờ thuộc tính IsFocused dường như không xếp tầng, nghĩa là nếu điều khiển con có tiêu điểm, vùng chứa cũng không được đặt thành 'tập trung' để chúng ta không thể sử dụng. Vì lý do tương tự, chúng tôi không thể thiết lập thuộc tính IsFocused trên container vì tôi tin rằng nó sẽ ăn cắp nó từ đứa trẻ.

Suy nghĩ duy nhất của tôi là tạo một DP mới có tên HasChildWithFocus hoặc một cái gì đó tương tự, sau đó trong đoạn mã sau, lắng nghe các sự kiện sôi nổi và đặt cờ đó. Không chắc đó là cách tốt nhất để đi. (Chúng tôi có thể thực hiện điều đó như một sự kết hợp thuộc tính/điều kiện hành vi kèm theo.)

Nhưng tất nhiên sẽ tốt hơn nếu chúng ta chỉ cần hỏi một điều khiển 'Này ... bạn hay bất kỳ con nào của bạn có tiêu điểm?'

Vì vậy, bạn có thể?

+0

+1 với ý tưởng của bạn về hành vi được đính kèm lắng nghe sự kiện sôi nổi và đặt thuộc tính được đính kèm. Đó là cách tôi sẽ làm điều đó, tôi không thể nghĩ ra bất kỳ ý tưởng sáng chói nào khác! – ColinE

+0

Vậy thì hãy +1 câu hỏi của tôi! C'mon ... giúp một người đam mê ở đây! [cười] (Cảm ơn phản hồi của bạn. Yeah ... đó là cách duy nhất tôi có thể nghĩ đến.) – MarqueIV

Trả lời

8

Bạn có thể sử dụng UIElement.IsKeyboardFocusWithin trực tiếp như thế này:

<Grid> 
    <Grid.Resources> 
     <Style x:Key="panelStyle" TargetType="Border"> 
      <Setter Property="BorderBrush" Value="PaleGoldenrod"/> 
      <Style.Triggers> 
       <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
        <Setter Property="BorderBrush" Value="PaleGreen"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Grid.Resources> 
    <UniformGrid Columns="2"> 
     <Border BorderThickness="10" Style="{StaticResource panelStyle}"> 
      <StackPanel> 
       <TextBox Text="TextBox1"/> 
       <TextBox Text="TextBox2"/> 
      </StackPanel> 
     </Border> 
     <Border BorderThickness="10" Style="{StaticResource panelStyle}"> 
      <StackPanel> 
       <TextBox Text="TextBox3"/> 
       <TextBox Text="TextBox4"/> 
      </StackPanel> 
     </Border> 
    </UniformGrid> 
</Grid> 

Trong ví dụ này biên giới có chứa các yếu tố với trọng tâm là bàn phím theo kiểu với một bàn chải biên giới khác nhau.

+0

Hoàn hảo! Chỉ là những gì tôi muốn. (Không biết về tài sản đó.) Hoàn hảo thời gian quá như tôi vừa mới bắt đầu viết những thứ đính kèm vì vậy bây giờ tôi không phải! :) – MarqueIV

Các vấn đề liên quan