2
<Grid x:Name="LayoutRoot">
    <Button x:Name="btn_num" Width="51"  Margin="318.849,158,262.15,0" Height="45" VerticalAlignment="Top" d:LayoutOverrides="HorizontalMargin">
        <Grid Height="38.166" Width="44.833">
            <Label x:Name="lbl_2" Content="2" Margin="4.483,-2.042,7,-1.626" FontSize="11.333"/>
            <Label x:Name="lbl_1" Content="1" Margin="4.483,0,7,-19.251" FontSize="11.333" Height="41.834" VerticalAlignment="Bottom"/>
            <Label x:Name="lbl_3" Content="3" Margin="0,8.083,-15,-11.751" FontSize="11.333" HorizontalAlignment="Right" Width="33.35" Foreground="Black"/>
        </Grid>
    </Button>
    <Button x:Name="btn_a" Content="A" HorizontalAlignment="Left" Margin="225.333,158,0,0" Width="55" Foreground="Black" Height="45" VerticalAlignment="Top" Click="btn_alt_Click" />
</Grid>

デザインはこんな感じになります

ボタン

public partial class button : Window
{
    static int _AClick = 0;
    public button()
    {
        this.InitializeComponent();     
    }

    private void btn_alt_Click(object sender, RoutedEventArgs e)
    {
        if (_AClick == 0)
        {
            _AClick = 1;
            Fill();
        }
        else
        {
            btn_num.Content = "";
            _AClick = 0;
        }
    }

    public void Fill()
    {
        btn_num.Content = "3";
    }
}

ウィンドウがロードされた後の結果

windowloaded

初めてAボタンをクリックした場合。結果は次のようになります

初め

もう一度Aボタンをクリックすると。結果は次のようになります

2番目

2回目にAボタンをクリックしたとき。以下のような結果が必要です。そのために私は何をすべきか。

実際

4

2 に答える 2

1

これを実現するためにWPFで利用できる方法はたくさんあります。これを行う1つの方法は、2つControlTemplates(1つは3つの数字すべてを持ち、もう1つは1つの数字だけ)を持ち、ボタンのテンプレートをコードで設定することです-

<Grid x:Name="LayoutRoot">  
    <Grid.Resources>
        <ControlTemplate
            x:Key="threeNumberTemplate"
            TargetType="{x:Type Button}">
            <Grid Height="38.166" Width="44.833"> 
                <Label x:Name="lbl_2" Content="2" Margin="4.483,-2.042,7,-1.626" FontSize="11.333"/> 
                <Label x:Name="lbl_1" Content="1" Margin="4.483,0,7,-19.251" FontSize="11.333" Height="41.834" VerticalAlignment="Bottom"/> 
                <Label x:Name="lbl_3" Content="3" Margin="0,8.083,-15,-11.751" FontSize="11.333" HorizontalAlignment="Right" Width="33.35" Foreground="Black"/> 
            </Grid> 
        </ControlTemplate>

        <ControlTemplate
            x:Key="oneNumberTemplate"
            TargetType="{x:Type Button}">
                <Label x:Name="lbl_3" Content="3" FontSize="11.333"/> 
        </ControlTemplate>
    </Grid.Resources>

    <Button x:Name="btn_num" Width="51"  Margin="318.849,158,262.15,0" Height="45" VerticalAlignment="Top" Template="{StaticResource threeNumberTemplate}"></Button>  
    <Button x:Name="btn_a" Content="A" HorizontalAlignment="Left" Margin="225.333,158,0,0" Width="55" Foreground="Black" Height="45" VerticalAlignment="Top" Click="btn_alt_Click" />  
</Grid>  

背後にあるコード-

private void btn_alt_Click(object sender, RoutedEventArgs e)
{
    if (_AClick == 0)
    {
        _AClick = 1;
        btn_num.Template = FindResource("oneNumberTemplate") as ControlTemplate;
    }
    else
    {
        btn_num.Template = FindResource("threeNumberTemplate") as ControlTemplate;
        _AClick = 0;
    }
}  

_AClickasを作成しDependecyProperty、その値を使用してトリガー内のテンプレートを交換することにより、トリガーを介して同じことを実現できます。

もう1つのアプローチは、2つあり、コードの値にButtons基づいて非表示/表示することです。_AClick

于 2012-07-06T08:17:12.103 に答える
0

3つ作成し、クラスをDataTemplate使用DataTemplateSelectorして、実行時に対応するデータテンプレートをロードできます。

MSDN- DataTemplateSelector

于 2012-07-06T09:31:01.123 に答える