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";
    }
}

窗口加载后的结果

窗口加载

如果我第一次单击A按钮。结果会是这样

第一的

如果我第二次单击A按钮。结果会是这样

第二

当我第二次单击A按钮时。我需要如下结果。我该怎么做。

实际的

4

2 回答 2

1

WPF 中有很多方法可以实现这一点。一种方法是有两个ControlTemplates(一个具有所有三个数字,另一个只有一个数字),然后在代码中设置按钮的模板 -

<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;
    }
}  

同样可以通过触发器来实现,方法是制作_AClickasDependecyProperty并使用它的值来交换触发器中的模板。

另一种方法是拥有两个并根据代码中的值Buttons隐藏/显示它们。_AClick

于 2012-07-06T08:17:12.103 回答
0

您可以创建三个DataTemplate并使用DataTemplateSelector类在运行时加载相应的数据模板。

MSDN -数据模板选择器

于 2012-07-06T09:31:01.123 回答