Đặt thuộc tính Kiểu của Nhãn WPF trong mã?


82

Trong App.xaml, tôi có mã sau:

<Application.Resources>
    <Style x:Key="LabelTemplate" TargetType="{x:Type Label}">
        <Setter Property="Height" Value="53" />
        <Setter Property="Width" Value="130" />
        <Setter Property="HorizontalAlignment" Value="Left" />
        <Setter Property="Margin" Value="99,71,0,0" />
        <Setter Property="VerticalAlignment" Value= "Top" />
        <Setter Property="Foreground" Value="#FFE75959" />
        <Setter Property="FontFamily" Value="Calibri" />
        <Setter Property="FontSize" Value="40" />
    </Style>
</Application.Resources>

Điều này có nghĩa là cung cấp một mẫu chung cho các nhãn của tôi.

Trong mã XAML chính, tôi có dòng mã sau:

<Label Content="Movies" Style="{StaticResource LabelTemplate}" Name="label1" />

Tuy nhiên, tôi muốn khởi tạo thuộc tính Style thông qua mã. Tôi đã thử:

label1.Style = new Style("{StaticResource LabelTemplate}");

label1.Style = "{StaticResource LabelTemplate}";

Không có giải pháp nào hợp lệ.

Bất kỳ trợ giúp sẽ được đánh giá cao :).


Có lý do gì để làm điều này từ mã phía sau của UserControl không? Có thể có nhiều giải pháp thanh lịch hơn.
csteinmueller

Câu trả lời:


183

Bạn đang cố gắng lấy phong cách ở đâu trong mã? Mã ẩn?

Bạn nên viết cái này:

Nếu bạn đang viết mã:

Style style = this.FindResource("LabelTemplate") as Style;
label1.Style = style;

Nếu bạn ở một nơi khác

Style style = Application.Current.FindResource("LabelTemplate") as Style;
label1.Style = style;

Lưu ý cuối cùng: đừng đặt tên a Stylevới từ khóa Template, cuối cùng bạn sẽ nhầm lẫn giữa a Stylevà a Template, và bạn không nên vì đó là hai khái niệm khác nhau.


Tôi đã tìm thấy bằng cách sử dụng "App" .Current.FindResource () thay vì "Ứng dụng".
alansiqueira27

Tôi nhận FindResource không tìm thấy
Welsh Vua

Tìm thấy một sửa chữa stackoverflow.com/questions/17704969/...
Welsh Vua

Nó giúp tôi rất nhiều. Cảm ơn bạn ^^
Dôn Kayt 23/04

3

Vui lòng kiểm tra kết quả kiểu null nếu không bạn sẽ rất buồn ... ... if (style! = Null) this.Style = style;


10
Khi nó không có giá trị, bạn có thể khóc hoặc nhân công và khắc phục sự cố.
Allen

0

Có thể là một câu hỏi cũ, nhưng nếu bạn đang dùng thử ứng dụng W10 UWP phải sử dụng bộ sưu tập tài nguyên của từng đối tượng hoặc bộ sưu tập tài nguyên của đối tượng Ứng dụng

KeyValuePair<object,object> styl = this.Resources
    .Where(x => x.Key.ToString() == "MyStyleTemplateName")
    .FirstOrDefault();
if (styl.Value != null)
    Style MyStyle = (Style)styl.Value;

Trường hợp MyStyleTemplateName phải được định nghĩa là tài nguyên của cái này

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.