2

私はWPFを始めたばかりで、本当にイライラしています。多くのプロパティはデフォルトで null であるように思われます (少なくとも私が現在取り組んでいるもの)。そのため、コンパイルして実行しても何も起こりません。

WPF オブジェクトの既定値を設定する簡単な方法または標準的なワークフロー手順はありますか?

たとえば、Canvas と Button を XAML ビューに配置し、コード ビューに移動して Button にイベント ハンドラーを追加するCanvas.Children.Add(new Ellipse())と、何も起こりません。次に、幅と高さを指定する必要があるのではないかと考えました。それでも何も起こりません。苦労の末、ようやくShape.Stroke物件を見つけました。

すると、楕円を配置するのに直感的ではなくEllipse.Xなります。Ellipse.Y繰り返しますが、 を見つけるのに 1 時間かかりましたCanvas.SetLeft()

Canvas.SetLeft(Random.Next(0, (int)Canvas.Width));最後のストローは、実行しようとすると実行時エラーが発生するためCanvas.WidthですNULL?!!? よかった...

確かに、WPF は多くの機能を提供しますが、Winforms から来る多くの作業のように思えますGraphics.DrawEllipse().. *汗*

4

2 に答える 2

2

WPF では、サイズのWidth/Height を明示的に設定しない場合、レイアウトによって決定されるため、このような要素のにアクセスするには、プロパティを使用します。これらは、のサイズを返しますxamlElementsContainerWidth/HeightActualWidth/ActualheightRenderedElement

例:

Canvas.SetLeft(Random.Next(0, (int)Canvas.ActualWidth));

Defaultの値を作成する場合Elementは、そのための xaml でスタイルを作成できますElement

例:

<Style TargetType="Ellipse">
    <Setter Property="Stroke" Value="Black"/>
</Style>
于 2013-03-14T22:05:57.743 に答える
1

WPFには大まかな学習曲線があります。難しいことの1つは、慣れ親しんだ手法をいくらか省き、WPFアプローチを採用することです。Xamlは、コントロールとそのプロパティを定義するための方法です。Xamlは、宣言を適切に行うための唯一の本当の目的である言語です。本質的に、コードのXaml部分を栄光のコンストラクターと考えてください。

<Window x:Class="TestWpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Name="Window"
        Title="MainWindow"
        Width="640"
        Height="480">       
    <Canvas>
        <Ellipse Canvas.Left="50"
                 Canvas.Top="50"
                 Width="142"
                 Height="88"
                 Fill="Black" />
    </Canvas>
</Window>

上記の宣言は、添付プロパティ用のXamlの気の利いた構文を利用しています。

同様のオブジェクトに一連の共通プロパティを頻繁に設定していることに気付いた場合は、スタイルを調査することをお勧めします。

于 2013-03-14T22:03:11.820 に答える