2009-01-20 50 views
38

我有一個窗口與我的用戶控件,我想使用戶控件寬度等於窗口寬度。怎麼做?如何在寬度上將WPF用戶控件拉伸到其窗口?

用戶控制是水平菜單和包含具有三列的網格:

<ColumnDefinition Name="LeftSideMenu" Width="433"/> 
<ColumnDefinition Name="Middle" Width="*"/> 
<ColumnDefinition Name="RightSideMenu" Width="90"/> 

就是這個原因我想要的窗口寬度,以拉伸用戶控制到100%的寬度,與第二列相對的。

編輯:

我使用的是網格,有一個窗口的代碼:

<Window x:Class="TCI.Indexer.UI.Operacao" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:tci="clr-namespace:TCI.Indexer.UI.Controles" 
    Title=" " MinHeight="550" MinWidth="675" Loaded="Load" ResizeMode="NoResize" WindowStyle="None" WindowStartupLocation="CenterScreen" WindowState="Maximized" Focusable="True" 
    x:Name="windowOperacao"> 
    <Canvas x:Name="canv"> 
     <Grid> 
      <tci:Status x:Name="ucStatus"/> <!-- the control which I want to stretch in width --> 
     </Grid> 
    </Canvas> 
</Window> 

回答

38

您需要確保您的usercontrol未在usercontrol的xaml文件中設置寬度。只需從中刪除寬度=「...」,你就可以走了!

編輯:這是我測試過它的代碼:

SOUserAnswerTest.xaml:

<UserControl x:Class="WpfApplication1.SOAnswerTest" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Height="300"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Name="LeftSideMenu" Width="100"/> 
      <ColumnDefinition Name="Middle" Width="*"/> 
      <ColumnDefinition Name="RightSideMenu" Width="90"/> 
     </Grid.ColumnDefinitions> 
     <TextBlock Grid.Column="0">a</TextBlock> 
     <TextBlock Grid.Column="1">b</TextBlock> 
     <TextBlock Grid.Column="2">c</TextBlock> 
    </Grid> 
</UserControl> 

Window1.xaml:

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:WpfApplication1" 
    Title="Window1" Height="300" Width="415"> 
    <Grid> 

     <local:SOAnswerTest Grid.Column="0" Grid.Row="5" Grid.ColumnSpan="2"/> 
    </Grid> 
</Window> 
+0

感謝您的關注,阿爾揚。它在這裏也可以正常工作,但是我的窗口沒有設置Width =「415」,因爲它被設計爲全屏。當我設定寬度時,效果很好。 – 2009-01-20 19:43:21

1

什麼容器要補充的用戶控件來?通常,當您將控件添加到網格時,它們將伸展以填充可用空間(除非它們的行/列被限制到特定寬度)。

2

是否將Horizo​​ntalAlignment設置爲Stretch,並將用戶控件上的Width設置爲Auto以獲得所需的結果?

7

是畫布你的窗口至關重要?如果沒有,請嘗試刪除它並將Grid作爲主面板。除非指定畫布,否則畫布沒有大小,而網格通常佔用所有可用空間。在畫布內部,網格將沒有可用空間。

20

WPF中的Canvas不提供太多的自動佈局支持。由於這個原因(Horizo​​ntalAlignment和VerticalAlignment不能像預期的那樣工作),我嘗試避開它們,但是我得到了代碼來處理這些小修改(將控件的寬度和高度綁定到畫布的ActualWidth/ActualHeight)。

<Window x:Class="TCI.Indexer.UI.Operacao" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:tci="clr-namespace:TCI.Indexer.UI.Controles" 
Title=" " MinHeight="550" MinWidth="675" Loaded="Load" 
ResizeMode="NoResize" WindowStyle="None" WindowStartupLocation="CenterScreen" 
WindowState="Maximized" Focusable="True" x:Name="windowOperacao"> 

<Canvas x:Name="canv"> 
    <Grid> 
     <tci:Status x:Name="ucStatus" Width="{Binding ElementName=canv 
                , Path=ActualWidth}" 
             Height="{Binding ElementName=canv 
                , Path=ActualHeight}"/> 
     <!-- the control which I want to stretch in width --> 
    </Grid> 
</Canvas> 

畫布是這裏的問題。如果你實際上並沒有利用畫布提供的佈局或Z-Order「擠壓」功能(想想PhotoShop中的flatten命令),我會考慮使用像Grid這樣的控件來代替,所以你最終不會不得不學習控制的怪癖,這種控制與WPF所期望的不同。

+0

謝謝,綁定到ActualWidth幫助我在一個項目中,我有一個自定義UserControl在StackPanel。 StackPanel使用Horizo​​ntalAlignement = Stretch並佔據整個寬度,但usercontrol保持在0寬度。將用戶控件綁定到它的父堆棧面板ActualWidth爲我解決了它。 – 2010-10-31 15:44:35

1

改爲在用戶控件中使用寬度和高度,請使用MinHeight和MinWidth。 然後你可以很好地配置UC,並且能夠在其他窗口內拉伸。

好吧,就像我在WPF中看到的一樣,微軟對Windows屬性和行爲做了一個重新思考,但到目前爲止,我沒有錯過任何來自舊窗口窗體的東西,WPF中的控件在那裏,但在一個新的點看法。

0

這對我有效。 不要爲UserControl分配任何寬度或高度,並在父窗口中定義行和列定義。

<UserControl x:Class="MySampleApp.myUC" 
     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" 
     > 
    <Grid> 

    </Grid> 
</UserControl> 


<Window xmlns:MySampleApp="clr-namespace:MySampleApp" x:Class="MySampleApp.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="auto" Width="auto" MinWidth="1000" > 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" />   
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" />    
    </Grid.ColumnDefinitions> 
    <MySampleApp:myUC Grid.Column="0" Grid.Row="0" />  
</Grid> 

相關問題