2012-07-06 2 views
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> 

그것은 내가 을 클릭하면 창이문제는

windowloaded

를로드 한 후 디자인이

Button

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

결과처럼 될 것입니다 WPF에서 동적으로 버튼 값을 변경하는 방법 버튼 처음으로. 나는이 버튼 두 번째클릭하면 결과는 다음과

First

처럼 될 것입니다. 나는이 버튼 두 번째클릭하면 결과는 다음과

second

처럼 될 것입니다. 아래의 결과가 필요합니다. 그 일을 어떻게해야합니까?

actual

답변

1

이를 달성하기 위해 WPF에서 사용할 수있는 많은 방법이있다.

<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; 
    } 
} 
이 작업을 수행하는 한 가지 방법은 두 ControlTemplates (한 세 개의 숫자를 가진 다른 단지 하나의 번호를 가짐) 다음 코드에서 버튼의 템플릿을 설정하는 것입니다

_AClickDependecyProperty으로 만들고 트리거의 템플릿을 스왑하는 데 사용하여 트리거를 통해 동일하게 수행 할 수 있습니다.

또 다른 접근법은 두 개의 Buttons을 가지며 코드의 _AClick 값을 기준으로 숨기거나 표시하는 것입니다.

+0

코드 위의 XAML code.With을 변경하지 않고있는 가능성이 확인, 그것은 확인되지 않습니다. –

+0

개별 라벨의 가시성을 변경하는 등 많은 일이 가능합니다. 정확한 요구 사항에 대한 세부 정보 없이는 제안 할 수 없습니다! – akjoshi

0

DataTemplate을 세 개 만들고 DataTemplateSelector 클래스를 사용하여 런타임에 해당 데이터 템플릿을로드 할 수 있습니다.

MSDN - 하나 button.But 난 수단의 많은이 프로그램을 개발하기위한 DataTemplateSelector