0

レイアウトには次のものがあります。

<ContentControl>
  <ContentControl.Style>
    <Style TargetType="{x:Type ContentControl}">
      <Style.Triggers>
        <DataTrigger Binding="{Binding CurrentPane}" Value="Pane1">
          <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate TargetType="{x:Type ContentControl}">
                <uc:UserControl x:Name="?????" />

簡単に言えば、は に基づいて にUserControlロードされます。1 つのことを除いて、すべてが素晴らしく機能します。メイン レイアウトに表示されるようにこれに名前を付けたいと思っても、表示されません。イベント ハンドラーをアタッチできるように、コントロールへの参照を取得する必要があります。TemplateDataTriggerUserControl

UserControl特に名前を付けずにメイン レイアウトからに到達する方法の別のアイデアがあれば、それも解決策になります。

4

2 に答える 2

2

に名前を付け、プロパティからContentControlを取得する必要があります。その後、そのメソッドを使用して にアクセスできます。ControlTemplateTemplateFindNameUserControl

<ContentControl Name="YourContentControl">
  <ContentControl.Style>
    <Style TargetType="{x:Type ContentControl}">
      <Style.Triggers>
        <DataTrigger Binding="{Binding CurrentPane}" Value="Pane1">
          <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate TargetType="{x:Type ContentControl}">
                <uc:UserControl x:Name="YourUserControl" />

次にコードで:

ControlTemplate yourTemplate = YourContentControl.Template;
UserControl yourUserControl = 
    (UserControl)yourTemplate.FindName("YourUserControl", YourContentControl);
if (yourUserControl != null)
{
    // do something with your control here
}

もちろん、UserControlがまだ として設定されていないときにこのコードを使用Templateすると、エラーが発生します。したがって、以下を確認する必要がありますnull

于 2013-10-11T09:21:16.953 に答える
0

私はそれをそのように見ています:Templateプロパティを定義するときにあなたがしていることはclass、wpfがcontrol. はインスタンスへの参照ではないため、属性uc:UserControlを使用して参照することはできません。x:Name

ControlTemplate別のリソースで定義した場合は、インスタンスではないことが簡単にわかります。

<ControlTemplate x:Key="MyControlTemplate">
  <uc:UserControl x:Name="MyUC">
</ControlTemplate>

<ContentControl x:Name="MyFirstContentControl">
  <ContentControl.Style>
    <Style TargetType="{x:Type ContentControl}">
      <Style.Triggers>
        <DataTrigger Binding="{Binding CurrentPane}" Value="Pane1">
          <Setter Property="Template" Value="{StaticResource MyControlTemplate}">
 [...]

<ContentControl x:Name="MySecondContentControl">
  <ContentControl.Style>
    <Style TargetType="{x:Type ContentControl}">
      <Style.Triggers>
        <DataTrigger Binding="{Binding CurrentPane}" Value="Pane1">
          <Setter Property="Template" Value="{StaticResource MyControlTemplate}">

[...]

では、「MyUC」と言う場合、2 つのインスタンスのどちらを指しますか? UserControl内側のMyFirstContentControlテンプレートか内側のテンプレートかMySecondContentControl? Sheridan が説明したように、(疑似コード) MyFirstControl.MyUC のようなものを動的に探す必要があるのはそのためです。

于 2013-10-11T09:33:04.560 に答える