2013-07-26 61 views
0

我有什麼用戶等級: 用戶類窗口資源定義的DataTemplate和ContentControl中,當作爲DataContext的

public class MyButton 
    { 
     public String ButtonProperty { get; set; } 
     public String LabelProperty { get; set; } 

     public MyButton() 
     { 
      ButtonProperty = "MyButtonText!"; 
      LabelProperty = "LabelText!"; 
     } 
    } 

的DataTemplate

<Window.Resources> 
     <DataTemplate DataType="{x:Type local:MyButton}"> 
       <Border Width="100" Height="100" BorderThickness="2" BorderBrush="Aquamarine"> 
        <StackPanel > 
         <Button> 
          <TextBlock Text="{Binding ButtonProperty}"></TextBlock> 
         </Button> 
         <Label Content="{Binding LabelProperty}"></Label> 
        </StackPanel> 
      </Border> 
     </DataTemplate> 
</Window.Resources> 

我想的DataTemplate將借鑑,而不是爲myButton

類的實例
<Window x:Class="WpfApplication7.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:WpfApplication7" 
    Title="MainWindow" Height="500" Width="800"> 
    <Window.Resources> 
     <DataTemplate DataType="{x:Type local:MyButton}"> 
      <Border Width="100" Height="100" BorderThickness="2" BorderBrush="Aquamarine"> 
       <StackPanel > 
        <Button> 
        <TextBlock Text="{Binding ButtonProperty}"> 

        </TextBlock> 
        </Button> 
        <Label Content="{Binding LabelProperty}"> 
        </Label> 
       </StackPanel> 
      </Border> 
     </DataTemplate> 
    </Window.Resources> 

    <!-- Create instance of MyButton in XAML--> 
    <local:MyButton></local:MyButton> 


</Window> 

它工作正常,但它不是我最後想要的。如果MyButton的實例將DataContext for Window會怎麼樣?

public MainWindow() 
     { 
      //Set instance of MyButton as DataContext 
      DataContext = new MyButton(); 
      InitializeComponent(); 
     } 

我想我必須寫在XAML端

<ContentControl DataContext="{Binding}"> 
    <!--MyButton XAML code from DataTemplate here --> 

</ContentControl> 


instead of 

<local:MyButton></local:MyButton> 

,但它並不在所有的工作。我做錯了什麼?

回答

1

你應該嘗試綁定到你的ContentControl中,而不是DataContext屬性的內容屬性:

<ContentControl Content={Binding } /> 

此外,ContentControl中的DataContext的已經是myButton的。

+0

具有內容屬性,它的工作原理,thx。但是,雖然DataContext已經MyButton(它來自Window.DataContext我認爲?)我需要設置內容explisitly。即 monstr

+0

是的,我的意思是。這是否按你的意願工作,或者你需要一些不同的東西。我會更新我的答案以澄清一些代碼。 關於DataContext,只要您沒有明確定義子類的DataContext,它就會沿着可視化樹傳遞。 – Arhiman

0

我不太確定你想在那裏做什麼。如果您只想擴展默認按鈕的功能,您可以定義attached properties

爲什麼要將窗口的DataContext作爲按鈕?也許換一種方式呢?不知道我是否正確理解那部分。

相關問題