2011-12-01 46 views
0

關於wpf中控件佈局的'簡單'。有一個自定義控件的網格在這個面板上有'面板'有三個元素兩個按鈕和它們之間的滑塊。右按鈕必須固定在「面板」的右側,左側按鈕固定在「面板」的左側,並且滑塊必須填滿所有自由空間按鈕。按鈕和網格的寬度(和高度)將在後面的代碼中設置爲dinamycaly。問題是 - 我必須使用什麼類型的「panel」,以及如何使它在給定的任務下運行? (堆棧,碼頭 - 即使有這種「橫向劃痕」也沒有這樣的功能) 在WinForms中,滑塊的寬度沒有問題= widthOfGrid - (widtOfBothButtons) 這是可能在wpf中完成的嗎?或者我必須在類似構造函數的函數中編寫上面的代碼? (offtop-對我來說這是WPF控件一個典型的任務,我奇怪爲什麼它有太少自動解決它)簡單的WPF'面板'問題

代碼:

<UserControl x:Class="WpfApplication1.UserControl2" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="42" d:DesignWidth="291"> 
    <Grid x:Name="gridCtrl"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition x:Name="clnmLbl" Width="Auto"/> 
      <ColumnDefinition x:Name="clnmPnl" /> 
     </Grid.ColumnDefinitions> 

     <Label x:Name="lblText" Grid.Column="0" Content="" VerticalAlignment="Center"> 

     </Label> 
     <DockPanel x:Name="pnlDock" Grid.Column="1"> 
      <Button x:Name="btnLeft" HorizontalAlignment="Left" DockPanel.Dock="Left"> 
      </Button> 
     <Border x:Name="BorderOfSlider" BorderBrush="#FF000000" BorderThickness="3,3,3,3" CornerRadius="8,8,8,8" > 
       <Slider x:Name="sldSlider" HorizontalAlignment="Stretch" VerticalAlignment="Center" > 
      </Slider> 
      </Border> 
     <Button x:Name="btnRight" HorizontalAlignment="Right" DockPanel.Dock="Right"> 
      </Button> 
     </DockPanel> 


    </Grid> 
</UserControl> 
+1

您是否嘗試過使用'LastChildFill =「True」''DockPanel'? – madd0

+0

我不需要最後一個孩子填寫。我需要具有這個beheviour的滑塊 - 中心元素 –

回答

0

這聽起來完全像什麼DockPanel不....這將停靠控制在面板的兩側,並添加默認情況下會伸長,並填寫所有剩餘空間

<DockPanel> 
    <Button DockPanel.Dock="Left" Content="Left Button" /> 
    <Button DockPanel.Dock="Right" Content="Right Button" /> 
    <Slider /> 
</DockPanel> 

此外,如果你是新來WPF最後的控制,我建議看看this site用於快速查看WPF的佈局控件。

編輯

確保你的控制,填補所有剩餘空間是最後項添加到您的DockPanel。如果不是,它將使用的DockPanel.Dock="Left"

+0

將使代碼更好,消除對默認參數值的依賴。 – 2011-12-01 14:32:16

+0

將此自定義控件放置到窗體後((是 - 按鈕停靠但滑塊具有寬度的默認值 - 這不等於按鈕之間的長度 –

+0

@PapaJohn)可以發佈您正在使用的XAML標記嗎?顯示你看到的結果的屏幕截圖? – Rachel

0

默認值有幾種方法可以做到這一點:

1)DockPanel中。左按鈕將佔據DockPanel左側的某個位置,右按鈕將佔用剩餘空間右側的所需空間。剩下的將用於顯示Slider。

<DockPanel> 
    <Button DockPanel.Dock="Left">Left button</Button> 
    <Button DockPanel.Dock="Right">Right button</Button> 
    <Slider /> 
</DockPanel> 

2)網格。創建3列的網格。左列和右列將只佔用必需的空間,其餘的將被賦予中央列。

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 
    <Button Grid.Column="0">Left button</Button> 
    <Slider Grid.Column="1" /> 
    <Button Grid.Column="2">Right button</Button> 
</Grid> 
+0

1)將這個自定義控件放置到窗體後不工作((是 - 按鈕停靠,但滑塊有一個默認值的寬度 - 這不等於按鈕之間的長度 –

+0

@PapaJohn,我想你是在說謊:) – Snowbear