Helpex - Trao đổi & giúp đỡ Đăng nhập
32

Có cách nào dễ dàng để sử dụng cùng một ký hiệu biên dịch có điều kiện mà tôi đang sử dụng cho mã c # của mình, trong các tệp xaml của tôi không?

32 hữu ích 1 bình luận 12k xem chia sẻ
23

Có một số hỗ trợ cho việc biên dịch có điều kiện trong XAML . Tuy nhiên, nó không giống như trong C #, mã. Bí quyết là sử dụng AlternateContentvới Requiresthứ gì đó được gắn cờ là Bỏ qua . Bằng cách làm này, bạn thực sự có thể có các phần xaml của mình không khả dụng dựa trên các điều kiện và bật hoặc tắt.

23 hữu ích 3 bình luận chia sẻ
3

Tôi đã thử giải pháp được đề cập khác và nó biên dịch và hoạt động, mặc dù Visual Studio sẽ cung cấp cho bạn vô số lỗi và đối với tôi, giải pháp dường như sử dụng nhiều thời gian trên chuỗi giao diện người dùng, cả hai điều này tôi đều không thích.

Giải pháp tốt nhất mà tôi đã thực hiện thay vào đó là tôi đặt tất cả logic có điều kiện vào mã phía sau điều khiển. Vì bạn không đề cập đến ý định của mình, nên đây có thể là thứ bạn đang tìm kiếm.

Tôi muốn có một biểu tượng biên dịch có điều kiện ảnh hưởng đến màu sắc trong ứng dụng của tôi, nhưng bạn cũng có thể tưởng tượng giải pháp tương tự sẽ được sử dụng cho các kiểu khác nhau hoặc thậm chí là các mẫu hoặc điều này có thể được sử dụng với logic if-else thông thường thay vì ký hiệu biên dịch.

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                x:Class ="MyApp.Style.MainStyle">

<!--Version1 -->
<Color x:Key="AbMainColor">#068C00</Color>
<Color x:Key="AbLighterMainColor">#5EBD50</Color>
<Color x:Key="AbDarkerMainColor">DarkGreen</Color>

<Color x:Key="MainColor" />
<Color x:Key="LighterMainColor" />
<Color x:Key="DarkerMainColor" />

<!-- Version2 -->
<Color x:Key="OtherRedColor">#EF0000</Color>
<Color x:Key="LighterRedColor">#e62621</Color>
<Color x:Key="DarkerRedColor">#EF0000</Color>

<SolidColorBrush x:Key="MainBrush" Color="{DynamicResource MainColor}" />
<SolidColorBrush x:Key="LighterMainBrush" Color="{DynamicResource LighterMainColor}" />
<SolidColorBrush x:Key="DarkerMainBrush" Color="{DynamicResource DarkerMainColor}" />

Mã phía sau cho việc này có thể được tạo theo cách thủ công bằng cách đặt MainStyle.xaml.cs vào ứng dụng của bạn và sử dụng nó như sau:

using System.Windows;

namespace MyApp.Style
{
    partial class MainStyle : ResourceDictionary
    {
        public MainStyle()
        {
            InitializeComponent();
#if VERSION2
            this["MainColor"] = this["OtherRedColor"];
            this["LighterMainColor"] = this["LighterRedColor"];
            this["DarkerMainColor"] = this["DarkerRedColor"];
#elif VERSION1
            this["MainColor"] = this["AbMainColor"];
            this["LighterMainColor"] = this["AbLighterMainColor"];
            this["DarkerMainColor"] = this["AbDarkerMainColor"];
#endif
        }
    }
}

Điều quan trọng cần lưu ý là nếu chỉ tham chiếu các giá trị chưa đặt từ mã XAML của tôi và điều này cũng hoạt động đối với StaticResources, mặc dù hàm tạo chỉ được gọi một lần. Tôi đoán việc ghi đè / sử dụng nhiều phương pháp từ điển tài nguyên hơn cũng sẽ hoạt động, nhưng điều này đã giải quyết được vấn đề của tôi nên tôi đã không thử.

3 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ c# xaml compilation conditional , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading