0

アイコン付きの四角形を使用して、計算のステータスを表示します。計算のステータス (完了/失敗 = 未完了) を処理するために、datatrigger とバインド "IsCompleted" を使用してスタイルを定義しました。現在、複数の計算があり、複数の計算に同じタイプの四角形 (すべて同じスタイルと動作) を使用したいと考えています。一般に、IsCompleted のバインドを 1 つの四角形に設定する方法を知っています。
特定の四角形のコード ビハインドでトリガーのバインドを設定するにはどうすればよいですか (sth。computer1.iconStyle.IsCompleted=true のように)? これは可能ですか、それとも計算ごとに 1 つのスタイルを定義する必要がありますか (これは多くの余分なコードになります)。

xaml:

<VisualBrush x:Key="NotCompleted" Stretch="Fill" Visual="{StaticResource appbar_error}" />
<VisualBrush x:Key="Completed" Stretch="Fill" Visual="{StaticResource appbar_check}" />

<Style x:Key="iconStyle" TargetType="{x:Type Rectangle}">
        <Setter Property="Width" Value="20"/>
        <Setter Property="Fill" Value="Red"/>
        <Setter Property="Height" Value="20"/>
        <Setter Property="Margin" Value="0,0,5,0"/>
        <Setter Property="OpacityMask" Value="{StaticResource NotCompleted}" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsCompleted}" Value="True">
                <Setter Property="Fill" Value="Green"/>
                <Setter Property="OpacityMask" Value ="{StaticResource Completed}"/>                    
            </DataTrigger>
        </Style.Triggers>
</Style>

電話:

<Rectangle Name="computation1"  Style="{StaticResource iconStyle}"  Grid.Column="0" VerticalAlignment="Top" />

コードビハインド:

public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(string property)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
    }

    private bool _isCompleted;
    public bool IsCompleted
    {
        get { return _isCompleted; }
        set { _isCompleted= value; NotifyPropertyChanged("IsCompleted"); }
    }

private bool comp1(){
  ....
  IsCompleted = !IsCompleted;
}

編集:

出力例:

グループボックス1:
| -------------------------
| 計算 1:(TextBlock)
| 完了または未完了のアイコン (長方形)
| 意味: (TextBlock)
| その他のもの:
| -------------------------
groupbox2:
| -------------------------
| 計算 2: (TextBlock)
| 完了または未完了のアイコン (長方形)
| グラフ: (イメージ)
| その他のもの:
| -------------------------

4

1 に答える 1

1

複数の計算の状態を視覚化する必要がある場合は、計算データ項目のコレクションにバインドされた ItemsControls が必要です。

<ItemsControl ItemsSource="{Binding Computations}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Rectangle Style="{StaticResource iconStyle}"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

計算項目クラスは次のようになります。

public class Computation : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private bool isCompleted;
    public bool IsCompleted
    {
        get { return isCompleted; }
        set
        {
            isCompleted = value;
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("IsCompleted"));
            }
        }
    }
}

次のように MainWindow クラスで使用できます。

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        Computations = new ObservableCollection<Computation>();
        Computations.Add(new Computation());
        Computations.Add(new Computation());
        Computations.Add(new Computation());

        DataContext = this;

        Computations[1].IsCompleted = true;
    }

    public ObservableCollection<Computation> Computations { get; set; }
}

これらすべてについては、MSDNのデータ バインディングの概要データ テンプレートの概要の記事で読み始めることができます。

于 2013-10-21T12:57:53.307 に答える