2015-10-19 59 views
-1

我是WPF的新手,我想要做的事情如下。這是我的XAML代碼:WPF MVVM - 如何在運行時動態地更改樣式

... 
<DataGridTextColumn Binding="{Binding ShippingNumber}" Header="出荷No." ElementStyle="{DynamicResource TextAlignCenter}" IsReadOnly="True"/> 
<DataGridTextColumn Binding="{Binding DivisionDisplay}" Header="區分" ElementStyle="{DynamicResource TextAlignCenter}" IsReadOnly="True"/> 
<DataGridTextColumn Binding="{Binding ShippingDestinationCode}" Header="出荷先コード" ElementStyle="{DynamicResource TextAlignCenter}" IsReadOnly="True"/> 
<DataGridTextColumn Binding="{Binding ShippingDestinationNameDisplay}" Header="出荷先名" ElementStyle="{DynamicResource TextAlignCenter}" IsReadOnly="True"/> 
    <DataGridTextColumn.ElementStyle> 
     <Style TargetType="TextBlock"> 
      <Setter Property="TextAlignment" Value="Center"/> 
      <Setter Property="Width" Value="{Binding DataContext.CustomWidth, ElementName=Page}"/> 
     </Style> 
    </DataGridTextColumn.ElementStyle> 
</DataGridTextColumn> 

所有的邏輯代碼,我在視圖模型寫(不允許在代碼隱藏),在虛擬機的構造我設置屬性CustomWidth = 500和搜索按鈕我的RelayCommand行動將值更改爲300.在第一次運行(加載事件)時將ctrl寬度增加到500是可以的,但是然後單擊搜索按鈕將其縮小到300,沒有任何發生。

任何人都可以告訴我爲什麼它沒有影響,以及如何使它工作?提前致謝。

+1

您的標記無效。 ShippingDestinationNameDisplay列具有自閉標籤,並且元素樣式設置了兩次。雖然你的問題是不同的,我只是注意到它。 – niksofteng

回答

-1

DataGrid一旦增大,並不會減小它的大小,因爲可以說一些更大的單元格內容,並且您已經設置了ColumnWidth =「SizeToCells」。您必須編寫自己的邏輯才能實現此目的,或者您可以將其設置爲SizeToHeader,並在該單元格的工具提示中顯示更大的單元格內容。

0

請看看這篇文章[SOURCE] DataGrid column width doesn't auto-update。簡而言之,它不能像前面提到的那樣自動完成,但是如果你想對它進行編碼,這裏有一些關於如何成功/動態地執行它的堆棧溢出的信息。我認爲有兩個主要部分。將寬度更新爲1 *並通知屬性已更改。

private void dg_TargetUpdated(object sender, DataTransferEventArgs e) 
{ 
    dg.Columns[0].Width = 0; 
    dg.UpdateLayout(); 
    dg.Columns[0].Width = new DataGridLength(1, DataGridLengthUnitType.Star); 
} 

通知屬性已更改。

<DataGridTextColumn Binding="{Binding First}" Width="1*"/> 
<DataGridTextColumn Binding="{Binding Last, NotifyOnTargetUpdated=True}"