0
<ToggleButton Command="{Binding Path=Command}" Content="{Binding Path=DisplayName}" Template="{Utilities:BindableResource {Binding Path=TemplateResource}}">
    <ToggleButton.Style>
        <Style TargetType="ToggleButton">
            <Style.Triggers>
                <Trigger Property="IsChecked" Value="True">
                    <Setter Property="Template" Value="{Utilities:BindableResource {Binding Path=SelectedTemplateResource}}" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </ToggleButton.Style>
</ToggleButton>

最初のバインド可能なリソースは、togglebutton のテンプレート プロパティの "TemplateResource" に対して機能しますが、"SelectedTemplateResource" はティガー セッター内では機能しません。このコードは、実際のリソースがテーマ付きのリソース ディクショナリ内にあるリソース ディクショナリ内にあります。

セッター値の xamlparseexception のキーが null であるというエラーが表示されます。何時間もこれに取り組んできましたが、なぜ機能しないのかわかりません...スタイルを取り出して最初のバインディングを2番目のリソースに置き換えると、適切に表示されますが、スタイル内のバインディングは機能しません.

誰かが理由を知っていますか?

編集 これを試しましたが、運がありません。

                <ToggleButton Command="{Binding Path=Command}" Content="{Binding Path=DisplayName}">
                    <ToggleButton.Style>
                        <Style TargetType="ToggleButton">
                            <Style.Triggers>
                                <Trigger Property="IsChecked" Value="False">
                                    <Setter Property="Template" Value="{Utilities:BindableResource {Binding Path=TemplateResource}}" />
                                </Trigger>
                                <Trigger Property="IsChecked" Value="True">
                                    <Setter Property="Template" Value="{Utilities:BindableResource {Binding Path=SelectedTemplateResource}}" />
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </ToggleButton.Style>
                </ToggleButton>
4

1 に答える 1

0

これは純粋なxamlでは実際には不可能であることがわかった後、c#を取り出してカスタムコントロールを作成しました...これは非常に基本的であり、改善することができます。少し変更しますが、最終的にはカスタムコントロールで解決します。リソースディクショナリ内からクリックイベントをヒットし、その場でテンプレートを変更できるようにするための問題。

public class TabButton : Button
{
    public static readonly DependencyProperty SelectedTemplateProperty = 
        DependencyProperty.Register("SelectedTemplate", typeof(ControlTemplate), typeof(TabButton));

    public ControlTemplate SelectedTemplate
    {
        get { return base.GetValue(SelectedTemplateProperty) as ControlTemplate; }
        set { base.SetValue(SelectedTemplateProperty, value); }
    }

    public TabButton()
    {
        this.Click += new RoutedEventHandler(TabButton_Click);
    }

    ~TabButton()
    {

    }

    public void TabButton_Click(object sender, RoutedEventArgs e)
    {
        ControlTemplate template = (ControlTemplate)this.FindResource("Environmental Template Selected");
        (sender as TabButton).Template = template;
    }
}

乾杯。

于 2012-04-12T13:27:26.333 に答える