2011-09-26 20 views
1

我在某些使用Datagrid的應用程序中使用Jetpack主題。使用DataGridTextColumn編輯綁定內容時,文本框不會橫跨和橫向拉伸。添加新項目到我的模型時,這是一個問題,因爲文本的值將爲空,文本框的點擊區域很小,並且正在爲我們的用戶帶來問題。使用Jetpack主題的Silverlight Datagrid編輯內容時不會伸展文本框

如何重寫文本框樣式,以便文本框在數據網格的單元格內水平和垂直延伸?對於DataGridTemplateColumn中的組合框,我有同樣的問題。如果沒有默認值,則組合框會很小,直到選中某個值爲止,並且一旦選擇了某個值,組合框將僅延伸至所選內容的寬度,而不是將其自身填充到網格中。

我創建了一個不使用主題的新項目,並且一切正常,所以它與Jetpack主題有關,但我無法弄清楚在哪裏。有人有主意嗎?

更新:我嘗試使用這種風格的列EditElementStyle:

<Style TargetType="TextBox" x:Key="StretchTextBox"> 
    <Setter Property="HorizontalAlignment" Value="Stretch" /> 
</Style> 

這也不能工作。

回答

1

找到DataGridTemplateColumn模板/風格TargetType="data:DataGridCell"

<Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
<Setter Property="VerticalContentAlignment" Value="Stretch"/> 

找到ContentPresenter元素,並設置 HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"VerticalAlignment="{TemplateBinding VerticalContentAlignment}"

或者你必須改變ContentTemplate

我不有Jetpack主題,但我希望這有助於。我只是猜測什麼可能是錯的。

+0

我試過了,但沒有骰子。這讓我想知道問題在於文本框的樣式而不是單元格。 –

+0

是的,它必須對文本框做些什麼,它用於在單元格中輸入數據。 Usualy它隱藏在ContentPresenter中,所以我對它有所幫助。嘗試不同的主題,然後比較樣式。 – Rumplin

1

我已經想出了答案,但我將Rumplin的答案標記爲接受,因爲他告訴我該怎麼做。如果你看看http://www.silverlight.net/content/samples/sl4/themes/jetpack.html那裏的數據網格也是一樣的。啓動一個沒有主題的新SL應用程序會使數據網格按預期工作。註釋掉整個的ContentTemplate使得在細胞中的內容填寫,因爲它應該是:

<Style TargetType="sdk:DataGridCell"> 
    <Setter Property="FontFamily" Value="{StaticResource NormalFontFamily}" /> 
    <Setter Property="FontSize" Value="{StaticResource DefaultFontSize}" /> 
    <Setter Property="Background" Value="Transparent" /> 
    <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
    <Setter Property="HorizontalAlignment" Value="Stretch" /> 
    <Setter Property="IsTabStop" Value="False" /> 
    <Setter Property="Padding" Value="7"/> 
    <!-- 
    <Setter Property="Template" Value="{StaticResource DataGridCellTemplate}" /> 
--> 
    <Setter Property="VerticalContentAlignment" Value="Stretch" /> 
</Style> 

我不知道很多關於主題化和動畫,但似乎這樣的伎倆。我在活動行周圍有一條藍線,但它不重要。

+0

您可以搜索DataGridCellTemplate並檢查文本框元素上發生了什麼 – Rumplin

0

JetPack主題中的DataGrid模板存在此問題(單元格內容不能拉伸),而SDK中的默認模板沒有。上面的答案沒有解決JetPack模板的問題;而是顯示如何使用默認的SDK模板而不是JetPack模板。我想我會發布JetPack模板本身的修補程序。

在Jetpack的主題的SDKStyles.xaml資源字典:

  1. 與X找到控件模板元素:鍵= 「DataGridCellTemplate」
  2. 在控件模板中,找到ContentControl中元素
  3. 集Horizo​​ntalContentAlignment和VerticalContentAlignment在ContentControl上展開。

默認SDK模板和JetPack模板之間差異的原因是SDK在JetPack模板使用ContentControl時使用ContentPresenter。