c# - ডেটা ট্রিগ্রার পাঠ্যের সম্পত্তি পরিবর্তন করে না



wpf xaml (1)

টেক্সটব্লকের পাঠ্য সম্পত্তিতে নির্ধারিত স্থানীয় মান ডেটাট্রিগারে সেটারের দেওয়া মানের চেয়ে বেশি প্রাধান্য পেয়েছে। বিশদের জন্য নির্ভরতা সম্পত্তি মান অগ্রাধিকার দেখুন।

আর একটি সেটার দ্বারা প্রাথমিক পাঠ্য মান সেট করুন:

<TextBlock>
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Setter Property="Text" Value="Unclicked"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Clicked,
                                       Source={x:Static Application.Current}}"
                             Value="{StaticResource True}">
                    <Setter Property="Text" Value="Clicked" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

আপনি বুলিয়ান রিসোর্সটি ব্যবহার করার সময় আপনি যে ত্রুটি বার্তাটি দেখছেন তা কেবল এক্সএএমএল ডিজাইনারই অভিযোগ করছেন। রানটাইমে কোনও ত্রুটি নেই।

আমি কোনও সম্পত্তি পরিবর্তন করার জন্য একটি স্টাইলে ডেটা-ট্রিগার ব্যবহার করার চেষ্টা করছি।

" ন্যূনতম, সম্পূর্ণ এবং যাচাইযোগ্য উদাহরণ " প্রয়োজনীয়তার সাথে সম্মতিতে ...

পুনরুত্পাদন করতে প্রথমে ভিজ্যুয়াল স্টুডিওতে একটি ডাব্লুপিএফ অ্যাপ্লিকেশন তৈরি করুন।

App.xaml.cs এর মধ্যে:

using System.ComponentModel;
using System.Windows;

namespace Foo{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application, INotifyPropertyChanged {
        private bool _clicked;
        public bool Clicked {
            get { return this._clicked; }
            set {
                this._clicked = value;
                this.PropertyChanged?.Invoke(
                    this, new PropertyChangedEventArgs( "Clicked" ) );
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
    }
}

মেইন উইন্ডো.এক্সএএমএল এর মধ্যে:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:lib="clr-namespace:System;assembly=mscorlib"
    xmlns:local="clr-namespace:Foo"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    mc:Ignorable="d" x:Class="Foo.MainWindow"
    Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <lib:Boolean x:Key="True">True</lib:Boolean>
    </Window.Resources>
    <Grid>
        <Button x:Name="button" Click="button_Click">
            <Viewbox>
                <TextBlock Text="Unclicked">
                    <TextBlock.Style>
                        <Style TargetType="{x:Type TextBlock}">
                            <Style.Triggers>
                                <DataTrigger
                                        Binding="{Binding
                                            Clicked,
                                            Source={x:Static Application.Current}}"
                                            Value="{StaticResource True}">
                                    <Setter Property="Text" Value="Clicked" />
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </TextBlock.Style>
                </TextBlock>
            </Viewbox>
        </Button>
    </Grid>
</Window>

মেইন উইন্ডো.এক্স্যামল সি-এর মধ্যে -

using System.Windows;

namespace Foo{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
        public MainWindow( ) {
            InitializeComponent( );
        }

        private void button_Click( object sender, RoutedEventArgs e ) {
            ( Application.Current as App ).Clicked = !( Application.Current as App ).Clicked;
        }
    }
}

পার্শ্ব নোট হিসাবে - আমি ডেটা ট্রিগারটির মানটি কেবল "True" সেট করার চেষ্টা করেছি এবং এটিও কার্যকর হয়নি (ট্রিগারটি ধরেনি, এবং সম্পত্তিটিকে নতুন মান হিসাবে সেট করার উপর ভিত্তি করে পাঠ্য পরিবর্তন হয়নি)।

তাহলে ডেটা ট্রিগার কেন এখানে ধরা বা কাজ করছে না? (হয় স্থির সংস্থান বা আক্ষরিক মান সহ)? আরও প্রাসঙ্গিক - কেন আমি এই ত্রুটি পাচ্ছি? "একটি 'ডেটা ট্রিগার' ব্যবহারের পরে (সিল করা), এটি ত্রুটি সংশোধন করা যায় না? এবং আমি এখানে যা করার চেষ্টা করছি তা সম্পাদন করার উপযুক্ত পদ্ধতি কী? (অগ্রাধিকার হিসাবে এখনও একটি ডেটা ট্রিগার ব্যবহার করে এবং একটি রূপান্তরকারী নয়, যেহেতু আমাকে দুটি মানের মধ্যে স্যুইচ করতে হবে)।





datatrigger