Tôi đang thực hiện một ứng dụng Addon cho Windows WPF. Vì vậy tôi có thể truy cập ListView với lập trình nhưng không chỉnh sửa nguồn WPF.Thay đổi có lập trình ListView Kiểu của bộ chọn
Để thêm định dạng đặc biệt cho ListViewItem
s tùy thuộc vào dữ liệu tôi đã tạo lớp StyleSelector
của riêng mình và gán một phiên bản của nó cho thuộc tính ListView ItemContainerStyleSelector
.
Dưới đây là nguồn:
public class MySelector extends System.Windows.Controls.StyleSelector {
private var oldSelector : System.Windows.Controls.StyleSelector;
public function MySelector(oldSelector : StyleSelector, debug : Object) {
this.oldSelector = oldSelector;
}
public function SelectStyle(item : Object, container : DependencyObject) : Style {
if (this.oldSelector != null) {
var oldStyle : System.Windows.Style = this.oldSelector.SelectStyle(item, container);
if (item[3] == "3") {
var newStyle : System.Windows.Style = new System.Windows.Style(oldStyle.TargetType, oldStyle);
newStyle.Setters.Add(new Setter(Control.BackgroundProperty, System.Windows.Media.Brushes.Red));
return newStyle;
} else {
return oldStyle;
}
}
return null;
}
}
này có bộ chọn cũ và cho biết thêm một nền đỏ nếu cột chỉ số 3 chứa một giá trị tương đương với "3"
.
Điều này hoạt động tốt nhưng khi một hàng trong ListView bị lơ lửng hoặc được chọn vẫn là kiểu gốc áp dụng và nền đỏ bị mất cho đến khi dòng được bỏ chọn hoặc không được chỉnh sửa.
Làm cách nào để áp dụng nền màu đỏ cho các dòng đó ngay cả khi chúng được chọn hoặc được di chuột?
Hãy nhớ rằng, tôi không thể chỉnh sửa XAML nhưng truy cập theo chương trình hầu hết các thuộc tính. Trong trường hợp đây là addon-code được viết bằng JScript.NET.
bây giờ tôi đã cố gắng thêm trigger để newStyle
với lập trình:
var t1 : Trigger = new Trigger();
t1.Property = ListBoxItem.IsSelectedProperty;
t1.Value = true;
t1.Setters.Add(new Setter(Control.BackgroundProperty, System.Windows.Media.Brushes.Black));
newStyle.Triggers.Add(t1);
var t2 : Trigger = new Trigger();
t2.Property = UIElement.IsMouseOverProperty;
t2.Value = true;
t2.Setters.Add(new Setter(Control.BackgroundProperty, System.Windows.Media.Brushes.Violet));
newStyle.Triggers.Add(t2);
var t3 : Trigger = new Trigger();
t3.Property = UIElement.IsFocusedProperty;
t3.Value = true;
t3.Setters.Add(new Setter(Control.BackgroundProperty, System.Windows.Media.Brushes.Yellow));
newStyle.Triggers.Add(t3);
Không có tác dụng.
Bạn có thể nhìn vào bộ sưu tập trigger trên phong cách mới của bạn và loại bỏ các mouseover và di chuột gây nên? 'newStyle.Triggers' –
Thật không may oldStyle và newStyle cả hai đều không có bất kỳ trình kích hoạt nào. Có thể họ đến từ một chủ đề? @BrentStewart – ZoolWay
Các hiệu ứng di chuột và chọn lựa này có thể được xác định bên trong mẫu mục (đó là DataTemplate). Trước tiên, bạn cần phải điều tra và tìm ra nơi kích hoạt được đặt. Bạn có thể sử dụng, ví dụ, ILSpy, để dịch ngược mã xaml từ mã nhị phân – Woodman