Vic*_*ues 43 .net c# wpf xaml wpf-controls
我有一个用我的用户控件的窗口,我想使usercontrol宽度等于窗口宽度.怎么做?
用户控件是一个水平菜单,包含一个包含三列的网格:
<ColumnDefinition Name="LeftSideMenu" Width="433"/>
<ColumnDefinition Name="Middle" Width="*"/>
<ColumnDefinition Name="RightSideMenu" Width="90"/>
Run Code Online (Sandbox Code Playgroud)
这就是我想要窗口宽度的原因,将用户控件拉伸到100%宽度,第二列是相对的.
编辑:
我正在使用网格,有Window的代码:
<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>
Run Code Online (Sandbox Code Playgroud)
Arj*_*nbu 43
您需要确保您的usercontrol没有在usercontrol的xaml文件中设置它的宽度.只需从中删除Width ="..."就可以了!
编辑:这是我测试它的代码:
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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
Mic*_*ael 21
WPF中的Canvas不提供太多的自动布局支持.我试图避开它们因为这个原因(HorizontalAlignment和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>
Run Code Online (Sandbox Code Playgroud)
Canvas是这里的问题.如果你实际上没有使用画布在布局或Z-Order"压缩"方面提供的功能(想想PhotoShop中的flatten命令),我会考虑使用像Grid这样的控件而不是你最终必须学习控件的怪癖,它的工作方式与WPF所期望的不同.
Canvas在您的窗口中至关重要吗?如果没有,请尝试将其删除并将Grid作为主面板.除非指定,否则Canvas没有大小,而Grid通常会占用所有可用空间.在Canvas内部,Grid将没有可用空间.