2011-03-17 128 views
1

我想爲一個標籤定義一個數據模板。這可能嗎?由於找不到有用的東西,所以我定義了一個控件模板並試圖讓事情順利進行。不幸的是,當我按如下方式綁定兩個項目時,即使具有給定參數的對象已成功綁定到後面代碼的標籤,我也會得到標籤不顯示任何內容。請幫忙!WPF標籤DataTemplate

<Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Label"> 
        <Border> 
         <Grid> 

          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="Auto"></ColumnDefinition> 
           <ColumnDefinition Width="Auto"></ColumnDefinition> 
          </Grid.ColumnDefinitions> 

          <TextBlock Background="Green" Text="{Binding TableName}" Grid.Column="0"></TextBlock> 
          <TextBlock Background="Red" Text="{Binding ColumnName}" Grid.Column="1"></TextBlock> 

         </Grid> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 

編輯:在window.resources全XAML中的要求

<Window.Resources> 

    <Style x:Key="myLabelTemplate" TargetType="Label"> 
     <!--<Setter Property="Background" Value="DarkKhaki"></Setter> 
     <Setter Property="Foreground" Value="White"></Setter>--> 

     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Label"> 
        <Border> 
         <Grid> 

          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="Auto"></ColumnDefinition> 
           <ColumnDefinition Width="Auto"></ColumnDefinition> 
          </Grid.ColumnDefinitions> 

          <!-- <TextBlock Background="Green" Text="{Binding TableName}" Grid.Column="0"></TextBlock> 
          <TextBlock Background="Red" Text="{Binding ColumnName}" Grid.Column="1"></TextBlock>--> 

         </Grid> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 

    </Style> 


    <!-- <ControlTemplate TargetType="Label" x:Key="tablelLabel"> 
     <Grid> 
      <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="5" CornerRadius="5"> 
       <Border.Background> 
        <SolidColorBrush Color="#50000000"></SolidColorBrush> 
       </Border.Background> 
      </Border> 
      <Grid> 
       <Grid.Background> 
        <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1"> 
         <GradientStop Color="Transparent" Offset="0" /> 
         <GradientStop Color="Black" Offset="1" /> 
         <GradientStop Color="Transparent" Offset="1" /> 
        </LinearGradientBrush> 
       </Grid.Background> 
      </Grid> 
     </Grid> 

    </ControlTemplate> --> 

    <ControlTemplate TargetType="Label" x:Key="generalLabel"> 
     <Grid> 
      <Border BorderBrush="#34B7AEAE" BorderThickness="3" CornerRadius="5"> 
      </Border> 
     </Grid> 
    </ControlTemplate> 

</Window.Resources> 
+2

什麼是表名和列名在綁定?你使用的是對象數據源綁定嗎? – 2011-03-17 11:32:39

+0

嗨Mamta,你是對的。我將這兩個對象綁定爲屬性。 – 2011-03-17 11:37:22

+0

請添加完整的xaml – 2011-03-17 11:57:45

回答

1

在這種情況下,我建議你創建自定義的控制。它會更優雅。

+0

感謝JohnKZ這是一個很好的建議。我之前沒有想到這一點。謝謝 – 2011-03-18 10:06:51

+0

@picmate:完全沒有。我喜歡自定義控件的力量)) – 2011-03-18 10:57:47

1

恕我直言,標籤的DataContext設置錯誤,因此沒有顯示值。

我的猜測是默認DataContext適用於標籤在這裏,它不包含TableName和ColumnName屬性。

看看你的輸出窗口,並尋找「錯誤40,綁定bla bla bla .....」這會給你更多的信息。

要小心,破損的dataBindings不會總是產生異常,它們有時只會在輸出窗口中顯示警告。

您應該提供有關Label類的更多信息以及如何將dataContext設置爲包含所提及屬性的對象。

你可能失去了一些東西像

MyCustomLabel.DataContext = MyCustomObjectCOntainingTheProperties;

地方

+0

謝謝大衛。我將數據綁定到datacontext屬性,並通過代碼將content屬性設置爲我想要的值。再次感謝。 – 2011-03-18 10:07:34

+0

是否解決了您的問題? – David 2011-03-18 13:07:37

+0

是的,它的確如此。我想稍後檢索綁定屬性。所以我想保持顯示值和界限值分開。這樣它的工作。 – 2011-03-21 09:56:34

2

您需要更改綁定如下:

<TextBlock Background="Green" Text="{Binding Source={StaticResource data}, Path=TableName}" Grid.Column="0"/> 
<TextBlock Background="Red" Text="{Binding Source={StaticResource data}, Path=ColumnName}" Grid.Column="1"></TextBlock> 

我試圖修改後的代碼用一個簡單的類具有這兩個屬性並且它已成功運行。

的ObjectDataProvider的被引用如下:

<ObjectDataProvider x:Key="data" ObjectType="{x:Type local:MyClass}"> 
</ObjectDataProvider> 
+0

嗨Mamta,非常感謝給我一個解決方案。因爲我將代碼綁定到代碼中另一個對象的聲明和綁定背後並不會在我的上下文中工作。我嘗試了您的解決方案,但無法產生太多結果。然而,謝謝你的答案。 – 2011-03-18 09:13:15