2012-01-06 13 views
1

フォレストを通したツリーが表示されません。 シンプルなデータバインディングを試して、コンバータで値をフォーマットしたいと思います。 (このコンバータの例では、0で数値データが表示されません。)バインドされたデータ形式のコンバータ

リソース:

<conv:FormattingConverter x:Key="FormattingConverter"/> 
    <Style x:Key="EGTSTextBoxInt" TargetType="TextBox"> 
     <Setter Property="Background" Value="{StaticResource CC_BACKGROUND}" /> 
     <Setter Property="Foreground" Value="{StaticResource CC_FOREGROUND}" /> 
     <Setter Property="FontFamily" Value="{StaticResource DefaultFont}" /> 
     <Setter Property="FontSize" Value="{StaticResource DefaultFontSize}" /> 
     <Setter Property="FontWeight" Value="Normal" /> 
     <Setter Property="FontStyle" Value="Normal" /> 
     <Setter Property="VerticalContentAlignment" Value="Center" /> 
     <Setter Property="VerticalAlignment" Value="Center" 
     <Setter Property="HorizontalAlignment" Value="Center" /> 
     <Setter Property="HorizontalContentAlignment" Value="Center" /> 
     <Setter Property="IsReadOnly" Value="True" /> 
    </Style> 

テキストボックス:

<TextBox Name="Bill_Item" 
      Grid.Column="6" 
      MinWidth="46" 
      MinHeight="23" 
      Style="{StaticResource EGTSTextBoxInt}" 
      Text="{Binding Path=Item, Mode=TwoWay, 
        Converter={StaticResource FormattingConverter}, 
        ConverterParameter=\{0:G\}}" /> 

私が何をしたいのかはに埋め込まコンバータコードを取得しています私は各テキスト=行でそれを綴る必要はありませんスタイル。

XAMLの背後にあるコードを追加することでこれを行うことはできません。
純粋なXAMLメソッドを探しています。

私はまだStylesでどのようなことが行われているか把握しようとしています。

ブライアンは

+0

あなたはあなたのスタイルでセッターの一部を持つことができません。 I.スタイルの中にあなたのテキスト全体の綴じ線が必要か、それともどれも必要ありません。あなたは半分をすることはできません。 – mydogisbox

答えて

0

に書式設定を適用するであろう、ContentStringFormatにスタイルセッターを適用することができます。
しかし、あなたも開始する前に:

  • それは
    アイデアはBindingから継承することで、カスタムマークアップ拡張機能を定義し、あなたのケース

1)で全く役に立たないのです

  • 重いですあなたがText ="{Binding SomeProperty}"と書くことを可能にするマークアップ拡張。あなたはスタイルで機能を配置することはできません彼自身の結合here
    このソリューションを作った誰かの例を見つけることができます

    2)を使用するためには(あなたが<TextBox>my text</TextBox>を行うことができますよう、あなたの場合には、テキストは、テキストボックスのデフォルトプロパティである)コントロールの既定のプロパティのバインディングを変更すること
    添付プロパティを定義します。あなたが望むコンバータを自動的に起動します。
    これは、実際には、この添付プロパティをスタイルに設定することを可能にします。しかし、それは非常に悪い習慣です。それは悪い魔法の弦です。

    3)だけでない、これをしないでください。
    毎回コンバータを書きます。

  • +0

    リソースを使用してパラメータを使用してコンバータを実行する方法はありますか(つまり、使用されているフォーマットへのグローバルな変更) – BRisley

    +0

    はい、グローバルであることを意味しています場合は、1つは、自動変換などのパラメータを設定するには、次のいずれかをコントロールをマークする。その後、ラベルに移動app.xaml –

    +0

    でそれをフォーマットの設定を暗黙のスタイルを入れて、コンバータを持っているVを検索します起動時にロードされたリストからのラベルの値(または適切なフォーマットコマンドを取得した場合はそれを使用します)。これにより、XAMLをオンザフライで構築し、単一の場所から変更可能な形式にし、必要に応じてユーザーレベルの変更をサポートすることもできます。 – BRisley

    0

    のTextBoxのTextプロパティは、データについてです。 Styleプロパティは、そのデータがどのように見えるかに関するものです。コンバーターをスタイルにアタッチするのは意味がありません。

    編集:私はあなたが今言おうとしていることを見ていると思います。 1つの場所にText="{Binding Path=Item}"があり、<Setter Property="Text" Value="~somehow get the converter in here and have it applied to the existing text property which is bound to Items~" />

    これらのアイデアは2つの場所で分けることはできません。彼らはあなたがしかし、あなたがコンバーター

    <TextBox Text="{Binding Path=Item, StringFormat=G}" /> 
    

    せずに、値のフォーマットへの結合にStringFormatを使用することができます

    を変換する価値なしに使用することはできませんので

    +0

    これはデータの見た目です。 0のフィールドを空白にすることは、値が0または負の場合に背景を変更することとほぼ同じです。 – BRisley

    +0

    あなたは実際にやろうとしていますか? – epalm

    +0

    すなわち(データをフォーマット、すなわちmm単位MM/DD/YYYY形式または日付/時刻の日付/ DD/YYYY HH:MMのA/P及び通貨場所のセット数に2つの小数又はフロートにstringformatと – BRisley

    0

    Convertersは、別の値に1つの値を変換するためのものですBindingクラスから継承するクラスを作成して、デフォルトのStringFormatを設定することもできますが、これは価値があるよりも面倒です。

    <TextBox Text="{local:NumberBinding Path=Item}" /> 
    

    そして、あなたが今までラベルの代わりにテキストボックスを使用している場合、あなたはこれを行うには、いくつかの方法がありますが、ラベルのContent

    <Style TargetType="{x:Type Label}"> 
        <Setter Property="ContentStringFormat" Value="G" /> 
    </Style> 
    
    +0

    問題あなたは 'DataTrigger'を使用することができ@BRisley。それが0または日付範囲外のブランキングのために制御することができないということである代わりに、コンバータのそれを使用することを好むだろうが、私たちに必要なオプションでそれを行う方法を発見したことはありません。 – BRisley

    +0

    値が0または「DateTime.MinValue」の場合は空白の値を表示する – Rachel

    関連する問題