2015-02-03 3 views
0

스타일 및 ControlTemplate을 사용하여 일반적인 페이지 탐색 버튼을 만들려고합니다. 아이디어는 대상 페이지 버튼의 CommandParameter 점이다 :WPF Button의 ControlTemplate에서 CommandParameter의 속성에 바인딩합니까?

<Button Height="64" Width="64" Style="{DynamicResource ButtonViewTileStyle}" 
      Command="{Binding Path=ChangePage}" 
      CommandParameter="{Binding Path=HomePage}"/> 

이 ... 그리고 모든 페이지 내가의 ControlTemplate에 사용할 사용하고 싶은 표시 이름과 IconName 속성이 있습니다. 어떤 텍스트에

<Style x:Key="ButtonViewTileStyle" TargetType="{x:Type Button}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Button}"> 
        <Canvas> 
         <TextBlock TextWrapping="Wrap" 
          Text="{Binding CommandParameter.DisplayName, 
           RelativeSource={RelativeSource TemplatedParent}}" 
          Canvas.Left="0" Canvas.Top="0" 
          HorizontalAlignment="Center" VerticalAlignment="Center" 
          Width="{TemplateBinding Width}" 
          Height="{TemplateBinding Height}"/> 
         </Canvas> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

어떤 제안이 일을하는 것 바인딩 = 여기에 바로 표시 이름을 가진 작동하지 않는 예는?

답변

0

아래 코드를 참조하십시오.

<Window.Resources>  
    <Style x:Key="ButtonViewTileStyle" TargetType="{x:Type Button}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Button}"> 
        <Canvas> 
         <TextBlock TextWrapping="Wrap" 
         Text="{Binding CommandParameter.DisplayName, 
          RelativeSource={RelativeSource TemplatedParent}}" 
         Canvas.Left="0" Canvas.Top="0" 
         HorizontalAlignment="Center" VerticalAlignment="Center" 
         Width="{TemplateBinding Width}" 
         Height="{TemplateBinding Height}"/> 
        </Canvas> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 
<StackPanel>   
    <Button Command="{Binding TestCommand}" Width="100" Height="25" Style="{DynamicResource ButtonViewTileStyle}" CommandParameter="{Binding Path=PageDetails}"></Button>  
</StackPanel> 
public partial class MainWindow : Window 
{ 

    public MainWindow() 
    { 
     InitializeComponent(); 
     this.DataContext = new TestViewModel(); 
    }  
} 
class TestViewModel 
{ 
    private CommndPrm pageDetials; 

    public CommndPrm PageDetails 
    { 
     get { return pageDetials; } 
     set { pageDetials = value; } 
    } 


    public TestViewModel() 
    {    
     pageDetials = new CommndPrm() { DisplayName="Test"};    
    }  

} 

class CommndPrm 
{ 
    private string displayName; 

    public string DisplayName 
    { 
     get { return displayName; } 
     set { displayName = value; } 
    } 

}