46

ユーザーコントロールを含むウィンドウがあり、ユーザーコントロールの幅をウィンドウの幅に等しくしたいと考えています。どうやってするか?

ユーザー コントロールは水平メニューであり、3 つの列を持つグリッドが含まれています。

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

これが、2 番目の列を基準にして、ユーザー コントロールを 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>
4

7 に答える 7

44

ユーザーコントロールの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>

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>
于 2009-01-20T18:32:07.830 に答える
23

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>

Canvas がここでの問題です。キャンバスが提供するレイアウトや Z オーダーの「押しつぶし」機能 (PhotoShop の flatten コマンドを考えてください) を実際に利用していない場合は、代わりに Grid のようなコントロールを使用することを検討してください。 WPF で期待するものとは異なる動作をするコントロールの癖を学ばなければなりません。

于 2009-01-22T19:49:31.573 に答える
7

キャンバスはあなたのウィンドウにとって重要ですか? そうでない場合は、それを削除してみて、グリッドをメイン パネルとして保持します。Canvas には指定がない限りサイズはありませんが、Grid は通常、使用可能なすべてのスペースを占有します。Canvas 内では、Grid に使用可能なスペースがありません。

于 2009-01-21T13:37:39.560 に答える
3

ユーザー コントロールで Horizo​​ntalAlignment を Stretch に設定し、Width を Auto に設定すると、目的の結果が得られますか?

于 2009-01-20T18:30:39.703 に答える
1

ユーザー コントロールで幅と高さを使用する代わりに、MinHeight と MinWidth を使用します。その後、UC を適切に構成でき、他のウィンドウ内で拡張できるようになります。

まあ、私が WPF で見ているように、Microsoft はウィンドウのプロパティと動作について再考しましたが、これまでのところ、古いウィンドウ フォームから何も見逃すことはありませんでした。WPF にはコントロールがありますが、新しい視点で。

于 2010-01-25T01:18:15.360 に答える
1

UserControl を追加するコンテナーは何ですか? 通常、コントロールを Grid に追加すると、(行/列が特定の幅に制限されていない限り) 利用可能なスペースを埋めるためにコントロールが引き伸ばされます。

于 2009-01-20T18:26:30.710 に答える
1

これは私にとってはうまくいきました。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>

于 2017-03-22T02:20:22.517 に答える