2

UserControl での高さと幅の設定に問題があります。新しい WPF アプリケーションを作成すると、自動的に MainWindow.xaml が作成されます。コードは次のようになります。

//MainWindow.xaml
<Window x:Class="Project.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>

    </Grid>
</Window>

//MainWindow.cs
namespace Project
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

次のように、ウィンドウの代わりに UserControl を使用するようにコードを変更します。

//MainWindow.xaml
<UserControl x:Class="Project.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="350" Width="525">
    <Grid>

    </Grid>
</UserControl>

//MainWindow.cs
namespace Project
{
    public partial class MainWindow : UserControl
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

高さや幅が設定されないのはなぜですか? それほど難しいことではありません。

4

2 に答える 2

2

2 番目のサンプルのコードは、コード ビハインド (ウィンドウ) で XAML (ユーザー コントロール) として別の基本クラスを指定したため、コンパイルすることさえできません。

コード ビハインドを UserControl に変更すると (または実際には XAML からのみ取得されるため何も変更しない場合)、サイズは XAML で設定したものから取得されるはずですが、初期の既定値としてのみです。コントロールを実際にどこかに表示するには、おそらく XAML でインスタンスを作成しますが、コードから作成することもできます。これらの各インスタンスは、ここで設定した幅と高さで作成されますが、いつでもオーバーライドできます。

<local:MainWindow Width="25" Height="100"/>

その時点で、設定した値はなくなりました。コントロール インスタンスの周囲にあるものに応じて、レイアウト システム内で発生する可能性のあるさまざまな相互作用もあります。含まれている Panel またはその他の要素は、Alignment、Margin、およびその他のさまざまな設定とともに、コントロールの実際のレンダリング サイズに影響を与える可能性があります。

于 2013-02-21T18:51:43.880 に答える
0

(命名法を間違えた場合はご容赦ください。私はまだ WPF を学んでいます。これについて間違っている場合は、修正してください。)

UserControls は、何らかの形のコンテナー (StackPanel、Grid、Window など) に追加する必要があります。これらのコンテナは、通常、レイアウトを設定するものであり、それらのほとんどは、子要素の幅/高さの設定を考慮に入れています。ただし、親が含まれていないと、子のレイアウトが適切に設定されません。

考えてみると、ユーザーコントロール(ボタンと同じレベルにありますが(非常に複雑なボタンですが))をユーザーにどのように表示したいのですか?

もちろん、UserControl ごとに個別のファイルを作成できるのは良いことですが、最終的には常にそれを Window にロードする必要があります (間違っていたら訂正してください)。

メイン ウィンドウを削除する代わりに、別のファイルに新しいUserControl を作成してみませんか?

于 2013-02-21T16:05:00.657 に答える