Tôi biết đây là một chuỗi cũ, nhưng tôi đã tìm thấy giải pháp cho vấn đề này. Tôi đã có thể sử dụng đề xuất của Aland Li, được tìm thấy here. Nó không hoàn toàn giống như trong CSS, nhưng nếu bạn biết loại phần tử gốc, nó hoạt động độc đáo ngay cả trong một kiểu.
Đây là ví dụ về cách tôi sử dụng nó. Tôi có một điều khiển TextBox sáng lên với một "màu sắc nổi bật" khi nó đã tập trung. Ngoài ra, tôi muốn điều khiển Nhãn liên quan của nó cũng sáng lên khi TextBox đã tập trung. Vì vậy, tôi đã viết một Trình kích hoạt cho điều khiển Nhãn làm cho nó sáng lên theo cách tương tự như điều khiển TextBox đã làm. Trình kích hoạt này được kích hoạt bởi một thuộc tính đính kèm tùy chỉnh được gọi là IsFocusedByProxy. Sau đó, tôi cần phải gắn kết IsFocusedByProxy của Label với IsFocused của TextBox. Vì vậy, tôi đã sử dụng kỹ thuật này:
<Grid x:Name="MaxGrid">
<Label x:Name="MaxLabel"
Content="Max:"
c5:TagHelper.IsFocusedByProxy="{Binding
Path=Children[1].IsFocused,
RelativeSource={RelativeSource AncestorType=Grid}}"
/>
<c5:TextBoxC5Mediator x:Name="MaxTextBox"
DataContext="{Binding ConfigVm.Max_mediator}" />
</Grid>
Tại thời điểm này, bạn có thể nghĩ rằng nó không tốt hơn là chỉ sử dụng ElementName trong Binding. Nhưng sự khác biệt là bây giờ tôi có thể di chuyển này ràng buộc vào một phong cách cho tái sử dụng:
<Setter Property="C5_Behaviors:TagHelper.IsFocusedByProxy"
Value="{Binding Path=Children[1].IsFocused,
RelativeSource={RelativeSource AncestorType=Grid}}" />
Và bây giờ tôi có thể khi tôi có một Xem đầy đủ của những lần xuất hiện, như thế này (tôi đã thiết lập các Styles cần thiết để được áp dụng ngầm, vì vậy đó là lý do tại sao không có đánh dấu cho thấy rằng đặt Styles):
<Grid x:Name="MaxGrid">
<Label x:Name="MaxLabel"
Content="Max:" />
<c5:TextBoxC5Mediator x:Name="MaxTextBox"
DataContext="{Binding ConfigVm.Max_mediator}" />
</Grid>
<Grid x:Name="MinGrid">
<Label x:Name="MinLabel"
Content="Min:" />
<c5:TextBoxC5Mediator x:Name="MinTextBox"
DataContext="{Binding ConfigVm.Min_mediator}" />
</Grid>
<Grid x:Name="StepFactorGrid">
<Label x:Name="StepFactorLabel"
Content="Step Factor:" />
<c5:TextBoxC5Mediator x:Name="StepFactorTextBox"
DataContext="{Binding ConfigVm.StepFactor_mediator}" />
</Grid>
<!-- ... and lots more ... -->
nào mang lại cho tôi những kết quả:
Trước khi bất kỳ chữ Hộp có trọng tâm:
Với textbox khác nhau nhận được tập trung:
Đó là loại gì tôi đang có khả năng sẽ làm gì. Vấn đề là có một số thuộc tính và bộ chuyển đổi mà tôi đang xem xét ràng buộc, vì vậy nó được nhiều bản sao và quá khứ để làm điều này cho mọi thuộc tính. Tôi nghĩ rằng tôi có thể ràng buộc bởi ElementName vào thẻ của TextBlock và sau đó sử dụng RelativeSource Self để có được các thuộc tính mà tôi cần. – Eclipse
Điều này có bao giờ làm việc cho bạn không? – Carlo
Tôi vừa mới tạo một điều khiển người dùng xử lý các trường hợp mà tôi cần. Nó dễ dàng hơn. – Eclipse