Wpf 數據綁定之BindingBase.StringFormat


BindingBase.StringFormat 屬性
獲取或設置一個字符串,該字符串指定如果綁定值顯示為字符串,應如何設置該綁定的格式。

StringFormat 可以是預定義的、撰寫的或自定義的字符串格式。有關字符串格式的更多信息,請參見.NET Framework 中的格式化類型

如果設置 Converter 和 StringFormat 屬性,則會先對數據值應用轉換器,然后應用 StringFormat。

當將 Binding 上的 StringFormat 設置為撰寫字符串格式時,只能指定一個參數。

如果使用 MultiBinding,則僅當 StringFormat 屬性是在 MultiBinding 上設置的時才應用此屬性。忽略在任何子 Binding對象上設置的 StringFormat 的值。撰寫字符串格式中參數的數目不能超過 MultiBinding 中的子 Binding 對象數。

在使用 PriorityBinding 時,可以在 PriorityBinding 和/或子綁定對象上設置 StringFormat。如果 StringFormat 是在所應用的子綁定上設置的,則使用該值。如果 StringFormat 不是在所應用的子綁定上設置的,則應用 PriorityBinding 的StringFormat(如果已設置)。

更多:https://msdn.microsoft.com/zh-cn/library/system.windows.data.bindingbase.stringformat(v=vs.110).aspx

一、對於Text類型的綁定

后台綁定DataContext值

textBlock.DataContext = System.Diagnostics.Process.GetCurrentProcess();
button.DataContext = textBlock.DataContext;
label.DataContext = DateTime.Now;

label3.DataContext = new { ID=1,Time=DateTime.Now};

1.格式化DateTime

<!--測試成功-->
<TextBlock x:Name="label3" Text="{Binding Path=Time,StringFormat={}{0:yyyy-MM-dd}}"
            Width="250" Height="30" Background="Linen" Margin="40,154,2,85">
</TextBlock>

2.MultiBinding綁定多個屬性,並格式化

<TextBlock x:Name="textBlock" HorizontalAlignment="Left" Margin="40,86,0,0" TextWrapping="Wrap" VerticalAlignment="Top">
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0}----)">
            <Binding Path="ProcessName" ></Binding>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>
<!--測試成功-->
<TextBlock x:Name="label3"
            Width="250" Height="30" Background="Linen" Margin="40,165,2,74">
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0:yyyy-MM-dd},ID:{1}">
            <Binding Path="Time" ></Binding>
            <Binding Path="ID" ></Binding>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

二、對於Content類型,格式化使用ContentStringFormat

1.綁定單個值,格式化DateTime

<!--對於Content類型,使用ContentStringFormat格式化-->
<Label x:Name="label" Content="{Binding}"  ContentStringFormat="時間:{0:yyyy-MM-dd}"
        Width="200" Height="30" Background="Red" Margin="40,206,52,33">
</Label>

2.綁定多個值,沒有目前還沒找到更好方法,暫且在Content內容中嵌入其他空間如TextBlock,實現綁定多個值

<Label  x:Name="label3"
        Width="250" Height="30" Background="Linen" Margin="40,165,2,74">
    <Label.Content >
        <StackPanel>
            <TextBlock >
                <TextBlock.Text>
                    <MultiBinding StringFormat="時間:{0:yyyy-MM-dd},ID:{1}">
                        <Binding Path="Time" ></Binding>
                        <Binding Path="ID"></Binding>
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>
        </StackPanel>
    </Label.Content>
</Label>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM