3

私たちのオフィスで開発された WPF アプリケーションの WiPFlash を使用してテストを書いています。これを行うには、今まで不要だったいくつかの WPF コンポーネントに name 属性を追加する必要がありました。

実行時に作成される一連のオブジェクトに一意の名前を設定しようとして、ブロックにぶつかりました。XAML は次のようになります。

<UserControl x:Class="Atlas.Activities.RibbonActivity.RibbonActivityView" 
                     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                     xmlns:ribbon="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary" 
                     xmlns:RoutedMessaging="clr-namespace:Caliburn.PresentationFramework.RoutedMessaging;assembly=Caliburn.PresentationFramework" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300">

<ribbon:RibbonButton Style="{StaticResource RibbonButtonView}" Name="RibbonActivity">
    <ribbon:RibbonButton.ContextMenu>
        <ribbon:RibbonContextMenu>
            <ribbon:RibbonMenuItem x:Name="Modify" Header="Modify..." RoutedMessaging:Message.Attach="[Event Click] = [Action Modify]" />
            <ribbon:RibbonMenuItem x:Name="Hide" Header="Hide" RoutedMessaging:Message.Attach="[Event Click] = [Action Hide]" />
            <ribbon:RibbonMenuItem x:Name="Delete" Header="Delete" RoutedMessaging:Message.Attach="[Event Click] = [Action Delete]" />
        </ribbon:RibbonContextMenu>
    </ribbon:RibbonButton.ContextMenu>
</ribbon:RibbonButton>

コンストラクターは、次を使用してサブジェクトを設定します。

WithSubject(activity);

Caliburn.PresentationFramework.Screens から継承されます。

だから私がしたいのは、各コントロールの名前をサブジェクト (アクティビティ) 内の名前フィールドに設定することです。

誰か助けてくれませんか、少なくともこれが可能かどうか教えてください。

前もって感謝します、

クレー。

4

1 に答える 1

7

あなたが達成しようとしていることのあなたの例のように

Style = "{StaticResource RibbonButtonView}" Name = "{Binding Subject.name}">

XAMLではこれを行うことはできません。XAMLがコンパイルされ、name要素がコンパイルプロセスで使用されるため、コードビハインドでXAML要素にアクセスできます。XAMLコンパイラはXML要素をC#コードに変換するときに、部分クラスの変数の名前としてNameプロパティを使用します。これは、WPFバインディングシステムによって実行時に設定できるプロパティではありません。この動作の詳細については、このすばらしいSOの質問を確認してください。

コントロールに動的に名前を付けたい場合は、コードビハインドでコントロールを作成する必要がありますが、何を使用しているかわからないため、これで目的が達成されるかどうかはわかりません。のプロパティに名前を付けます。

于 2011-04-01T04:42:18.107 に答える