0

いくつかの文字列から WPF コントロールに表示される一連の ControlTemplates を作成しています。私はこのコードを使用します:

string theTemplate = @"<ControlTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">
                <Grid Name=""RootElement"" RenderTransformOrigin=""0.5,0.5"" >
                    <Grid.RenderTransform>
                        <ScaleTransform ScaleX=""1"" ScaleY=""1"" />
                    </Grid.RenderTransform>
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup Name=""CommonStates"">
                            <VisualState Name=""Normal"">
                                <Storyboard>
                                    <DoubleAnimation BeginTime=""00:00:00"" 
                                                                Storyboard.TargetName=""RootElement"" 
                                                                Storyboard.TargetProperty=""(UIElement.RenderTransform).(ScaleTransform.ScaleX)"" 
                                                                To=""1"" Duration=""0:0:0.1"" />
                                    <DoubleAnimation BeginTime=""00:00:00"" 
                                                                Storyboard.TargetName=""RootElement"" 
                                                                Storyboard.TargetProperty=""(UIElement.RenderTransform).(ScaleTransform.ScaleY)"" 
                                                                To=""1"" Duration=""0:0:0.1"" />
                                </Storyboard>
                            </VisualState>
                            <VisualState Name=""MouseOver"">
                                <Storyboard>
                                    <DoubleAnimation BeginTime=""00:00:00"" 
                                                                Storyboard.TargetName=""RootElement"" 
                                                                Storyboard.TargetProperty=""(UIElement.RenderTransform).(ScaleTransform.ScaleX)"" 
                                                                To=""1.5"" Duration=""0:0:0.1"" />
                                    <DoubleAnimation BeginTime=""00:00:00"" 
                                                                Storyboard.TargetName=""RootElement"" 
                                                                Storyboard.TargetProperty=""(UIElement.RenderTransform).(ScaleTransform.ScaleY)"" 
                                                                To=""1.5"" Duration=""0:0:0.1"" />
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                <Ellipse Height=""{Binding Symbol.Size}"" Width=""{Binding Symbol.Size}"" Fill=""{Binding Symbol.Color}""  Stroke=""Black"">

                </Ellipse>
            </Grid>
        </ControlTemplate>";
System.IO.StringReader stringReader = new System.IO.StringReader(theTemplate);
System.Xml.XmlReader reader = System.Xml.XmlReader.Create(stringReader);
ControlTemplate ct = (ControlTemplate)System.Windows.Markup.XamlReader.Load(reader);

それはすべてうまくいきます。問題は、Ellipse を使用する代わりに、カスタム Shape を使用しようとした場合です。通常の WPF ウィンドウでは、次の参照を使用します。

xmlns:custom="clr-namespace:WpfApplication2" 

そして、楕円の代わりに私ができること:

<custom:Square Size=""{Binding Symbol.Size}"" Fill=""{Binding Symbol.Color}"" Stroke=""Black"" RotationAngle=""0"">
</custom:Square>

今、その行を文字列「theTemplate」に追加すると、機能するようになりました。私が思う理由は、その参照がないためです。次のようなさまざまな場所に参照を追加しようとしました:

<ControlTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:custom="clr-namespace:WpfApplication2" >

動作しませんでした。私も試しました:

<custom:Square Size=""{Binding Symbol.Size}"" Fill=""{Binding Symbol.Color}"" Stroke=""Black"" RotationAngle=""0"" xmlns:custom="clr-namespace:WpfApplication2" >
</custom:Square>

そしてそれも好きではありませんでした。

すっごく、何か提案はありますか?カスタム シェイプを参照するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

1

を使用するXamlReader場合、通常は CLR を完全に修飾する必要がありますxmlns。つまり、アセンブリを追加します。

例えば

xmlns:custom="clr-namespace:WpfApplication2;assembly=WpfApplication2"
于 2012-09-12T17:35:31.577 に答える