2016-12-06 65 views
0

的WPF電網ColumnDefinition寬度我有一個網格,看起來像這樣:調整基於與整個網格

<Grid> 
    <Grid.ColumnDefinitions> 
     <!-- Name --> 
     <ColumnDefinition Width="*"/> 
     <!-- Separator --> 
     <ColumnDefinition Width="Auto"/> 

     <!-- Session Id --> 
     <ColumnDefinition Width=".5*" MaxWidth="240" /> 
     <!-- Separator --> 
     <ColumnDefinition Width="Auto" /> 

     <!-- Bag --> 
     <ColumnDefinition Width="{Binding ElementName=CurrentBagNumber, 
              Path=Width}" /> 
     <!-- Bag Status --> 
     <ColumnDefinition Width="{Binding ElementName=BagStatusText, 
              Path=Width}" /> 

     <!-- Several more static width columns -->   
     ..... 

這樣做的會話ID列一半大的名稱列。但真正想要的是當網格寬度大約爲1024像素時,會話ID爲.1與名稱一樣大。當網格寬度大約爲2000像素時,會話ID是.9的大小。調整這兩者之間的順利調整。

有點像梯度百分比。

因此,回顧一下,當網格較小時,SessionId比Name小得多,但當網格較大時,與Name大約相同。這在WPF中可能嗎?

回答

0

隨着WPF網格開箱,不,你要求的是不可能的。

但是,您可以使用附加行爲來自定義列寬,根據屏幕的寬度動態更改ColumnDefinition的Width參數。

<ColumnDefinition ns:MyBehavior.SmallWidth="0.1*" 
    ns:MyBehavior.LargeWidth="0.5*" 
    ns:MyBehavior.Threshold="1024" 
    ns:MyBehavior.CurrentWidth="{Binding ActualWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" /> 

NS =您的行爲命名空間

CurrentWidth是結合當前窗口/控制

在爲MyBehavior實施的寬度,你有4個附加依賴屬性手動那會設置基於SmallWidth/LargeWidth/Threshhold/CurrentWidth的ColumnDefinition Width屬性

See here for more information on Attached Properties