فرمت شرطی اطلاعات به کمک تریگرها در WPF
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: یک دقیقه

فرض کنید در یک لیست، تعداد زیادی صفر وجود دارند و تنها معدودی از آن‌ها دارای مقداری متفاوت هستند. شاید بد نباشد برای کاهش نویز صفحه، صفرها نمایش داده نشوند و در کل لیست، فقط مقادیر بیشتر از صفر مشخص باشند. برای اینکار راه حل‌های زیادی وجود دارند؛ منجمله، استفاده از تبدیلگرها. اما با استفاده از تریگرهای WPF اینکار را با چند سطر کد ساده، در همان فایل XAML یا یک شیوه‌نامه جدید می‌توان انجام داد.

تعریف تریگر مخفی سازی یک برچسب

        <Style TargetType="TextBlock" x:Key="TextBlockStyle1">
            <Style.Triggers>
                <Trigger Property="Text" Value="0">
                    <Setter Property="Visibility" Value="Collapsed" />
                </Trigger>
            </Style.Triggers>
        </Style>
برای تعریف تریگر، ابتدا در یک Style جدید، مشخص می‌کنیم که اطلاعات تعریف شده باید به چه نوع المانی اعمال شوند. سپس در قسمت Style.Triggers تعیین می‌کنیم که اگر خاصیت Text این المان مساوی صفر بود، مقدار خاصیت Visibility آن به Collapsed تغییر یابد تا مخفی شود.

این تعاریف در مورد یک TextBlock بود. برای کنترل Label به علت نداشتن خاصیت Text و داشتن خاصیت Content می‌توان به نحو ذیل عمل کرد:
        <Style TargetType="Label" x:Key="LabelStyle1">
            <Style.Triggers>
                <Trigger Property="Content">
                    <Trigger.Value>
                        <system:Int32>0</system:Int32>
                    </Trigger.Value>
                    <Setter Property="Visibility" Value="Collapsed" />
                </Trigger>
            </Style.Triggers>
        </Style>
چون خاصیت Content می‌تواند یک object نیز باشد، توسط Trigger.Value مقدار آن به یک Int32 تبدیل شده و سپس بر این مبنا تصمیم گیری می‌شود.

برای اعمال آن‌ها نیز می‌توان به نحو ذیل عمل کرد:
 <TextBlock Text="{Binding Rating, Mode=OneTime}"
Style="{StaticResource TextBlockStyle1}" />


با اعمال این تریگر، مقادیر صفر در ستون rating نمایش داده نخواهند شد.

یک مثال کامل را در این زمینه از اینجا می‌توانید دریافت کنید
WpfVisibilityTriggers.zip


برای مطالعه بیشتر
Trigger, DataTrigger & EventTrigger
WPF MultiTrigger and MultiDataTrigger