0

IsCheckedのトリガーによって変更されるいくつかの描画プリミティブを含むチェックボックスとして実装されたロック/ロック解除された南京錠アイコンがあります。Blendで問題なく動作します。VS2010 およびビルドされたアプリケーションでは、南京錠がデフォルトの開いた状態から閉じた状態に切り替わると、南京錠の本体が消えるため、閉じた「フープ」のみが表示されます。フープは正しい場所にあります - 動くので、コントロールはキャンバスを切り替えているように見えます. 元に戻すと、本体が再び表示されます。誰かが似たようなことに遭遇したことがありますか/何が起こっているのか知っていますか?

テンプレート;

<Canvas x:Key="PadlockClosed" Width="21" Height="21">
    <Path Data="M10.668887,13.83234 C10.168442,2.3320701 20.347726,0.31172793 21.014875,13.894838" Height="9.451" Canvas.Left="2.719" Stretch="Fill" Canvas.Top="0.162" Width="10.362" StrokeThickness="2" Stroke="#FFE2E2E2"/>
    <ContentPresenter Content="{DynamicResource PadlockBody}"/>
</Canvas>

<Canvas x:Key="PadlockOpen" Width="21" Height="21">
    <Path Data="M10.668887,13.83234 C10.168442,2.3320701 20.347726,0.31172793 21.014875,13.894838" Height="9.451" Canvas.Left="11.102" Stretch="Fill" Canvas.Top="0.162" Width="10.362" StrokeThickness="2" Stroke="#FFE2E2E2"/>
    <ContentPresenter Content="{DynamicResource PadlockBody}"/>
</Canvas>

    <Canvas x:Key="PadlockBody">
        <Rectangle Height="12.8" Canvas.Left="0.125" Canvas.Top="8.0" Width="15.082" RadiusX="4" RadiusY="4" RenderTransformOrigin="0.704,0.5">
            <Rectangle.Fill>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                    <LinearGradientBrush.RelativeTransform>
                        <TransformGroup>
                            <ScaleTransform CenterY="0.5" CenterX="0.5"/>
                            <SkewTransform CenterY="0.5" CenterX="0.5"/>
                            <RotateTransform Angle="-90" CenterY="0.5" CenterX="0.5"/>
                            <TranslateTransform/>
                        </TransformGroup>
                    </LinearGradientBrush.RelativeTransform>
                    <GradientStop Color="#FF8B8989" Offset="0"/>
                    <GradientStop Color="White" Offset="1"/>
                </LinearGradientBrush>
            </Rectangle.Fill>
        </Rectangle>
        <Path Data="M15.1,16.333333 L15.1,19.750334" Height="5.417" Canvas.Left="6.375" Stretch="Fill" Stroke="Black" StrokeThickness="1" StrokeEndLineCap="Round" Canvas.Top="11.333" Width="2.167"/>
        <Ellipse Height="2.5" Canvas.Left="6.125" Canvas.Top="11.333" Width="2.584" Fill="#FF0A0101"/>
    </Canvas>

テストに使用しているもの;

<CheckBox Template="{DynamicResource PadlockCheckBox}" Width="20" Height="20" IsChecked="True"/>

リソースが動的である唯一の理由は、Blend を簡単にするためです。

4

1 に答える 1

0

他の誰もより良い答えを持っているようには見えないので、少し不自由ですが、私が発見した回避策を投稿します。PadlockOpen キャンバスと PadlockClosed キャンバスの両方で PadlockBody を再利用する代わりに、それをコピーして PadlockBody2 を作成し、ケースの 1 つでそれを使用しました。何らかの奇妙な理由で、同じコントロール テンプレート内で両方のケースで同じキャンバス リソースを使用すると、Blend では問題なく動作しますが、ビルドされたアプリケーションでは問題が発生するように見えます。

于 2013-01-09T09:09:40.073 に答える