右揃えの確認や自動更新の解除-設定をコンポーネントのラインナップエキスパンダヘッダー

StackOverflow https://stackoverflow.com/questions/729200

  •  05-09-2019
  •  | 
  •  

質問

また、テキストエキスパンダーヘッダ部左揃えて、そのテキストが右揃えております。いかに拡大するヘッダの幅のコンテナ、思いがけdockpanel定のテキストブロックドックが見られるとは思えません。ソリューション?

<Expander>
  <Expander.Header>
    <DockPanel
      Width="{Binding
        RelativeSource={RelativeSource
        Mode=FindAncestor,
        AncestorType={x:Type Expander}},
        Path=ActualWidth}">
      <TextBlock
        Text="I am header text…"
        Background="LightBlue"
      />
      <TextBlock DockPanel.Dock="Right"
        Text="I am header text…"
        Background="Yellow"
      />
    </DockPanel>
  </Expander.Header>
</Expander>
役に立ちましたか?

解決

TextAlignmentsにストレッチする権利とHorizontalAlignmentプロパティにTextBlockプロパティを設定してみてください。それは私が考えるのを助ける必要があります。

色の使用はデモ目的以外の何かのためであり、あなたは文字通り全体の要素が、右整列になりたい場合は、

あなたはfalseにLastChildFillDockPanelプロパティを設定することで、見たいと思うかもしれません。

他のヒント

これは私は大泣きしてしまいました。この動きの矢印は右での降のヘッダの再帰のための内容です。

<Expander FlowDirection="RightToLeft" >  
  <Expander.Header>
    <DockPanel FlowDirection="LeftToRight" 
          HorizontalAlignment="{Binding HorizontalAlignment,
                          RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContentPresenter}},
                          Mode=OneWayToSource}"
          LastChildFill="True">
      <!-- Change the look inside header here -->

      <Label Content="Header" Background="Red" />
    </DockPanel>
  </Expander.Header>

  <Expander.Content>
    <!-- Change the look inside content here, by default Expander.Content is stretched -->
    <DockPanel FlowDirection="LeftToRight" LastChildFill="True">
      <Label Content="Left" Background="Aquamarine" />
      <Label Content="Fill" Background="Plum" />
    </DockPanel>
  </Expander.Content>
</Expander>

()

残念ながら、これは代わりにストレッチの左側にヘッダの水平方向の配置を設定するデフォルトパンダテンプレートの問題に関係しています。それは作業を取得するための最良の方法は、これを正しく設定し、新しいテンプレートを作成することです。ここでは詳細はリンクがあります:

http://silverlight.net/forums/p/57142/145801 .aspxの#145801

これは、Silverlightのだが、同様にWPFに適用されます。これを実行する別の方法は、エキスパンダーを含む要素の実際の幅に上記のごdockpanel幅をバインドすることです。これは素晴らしいソリューションではありませんが、それは動作します。あなたは、幅の値コンバータを作成する必要があります。ここではいくつかのコードがあります:

[ValueConversion(typeof(double), typeof(double))]
public class OffsetDoubleConverter : IValueConverter
{
    #region IValueConverter Members

    public double Offset { get; set; }
    public bool KeepPositive { get; set; }

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        double number = (double)value + Offset;
        if ((KeepPositive) && (number < 0.0))
        {
            number = 0.0;
        }
        return number;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        double number = (double)value - Offset;
        if ((KeepPositive) && (number < 0.0))
        {
            number = 0.0;
        }
        return number;
    }

    #endregion
}

そして、あなたのXAMLでます:

<!-- create a ref to your namespace -->
xmlns:loc="clr-namespace:YourNamespace"

...

<Window.Resources>
<loc:OffsetDoubleConverter x:Key="ExpanderConverter" Offset="-208.0" KeepPositive="True"/>
</Window.Resources>

...

<DockPanel Width="{Binding ElementName=ADifferentElement, Path=ActualWidth,
                   Converter={StaticResource ExpanderConverter}}">
...

繰り返しますが、これは最善の解決策ではありませんが、それが動作するはずです。親のactualwidthは、エキスパンダーのご幅に基づくことになるので、あなたはあまりにも小さなオフセット値を設定し、エキスパンダーの親にバインドする場合は、もう一つ注意すべきは、あなたがハングアップするのVisual Studioを得ることができます。

この実装は非常に明確でない場合は、私に教えてください。繰り返しますが、私は本当にただエキスパンダ用のカスタムテンプレートを使用することをお勧めします。あなたは、デフォルトのテンプレートを取得し、わずかにそれを動作させるためにそれを変更することができます。あなたがしたい場合、私は同様にそのを投稿することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top