在做WPF項目的時候我們往往需要把前台代碼寫在后台,這樣控制更靈活,減少代碼量。下面一個列子展示了后台實現綁定,數據轉換Convert,Grid布局后台寫法。
下面直接貼代碼
(一)前台代碼
<Window x:Class="BindingDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:BindingDemo" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <local:NaNConvertDash x:Key="nanConvert"/> </Window.Resources> <Grid x:Name="grid" Height="60"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"> </ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition> </Grid.ColumnDefinitions> </Grid> </Window>
(二)后台代碼
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Controls.Primitives; namespace BindingDemo { /// <summary> /// MainWindow.xaml 的交互邏輯 /// </summary> public partial class MainWindow : Window { string str = string.Empty; string stringF4 = "{0:F4}"; public MainWindow() { InitializeComponent(); UniformGrid gridTitle = new UniformGrid(); gridTitle.Width = 100; gridTitle.Columns = 1; TextBox tbxTitleChinese = new TextBox(); tbxTitleChinese.Text = "語文"; gridTitle.Children.Add(tbxTitleChinese); TextBox tbxTitleEnglish = new TextBox(); tbxTitleEnglish.Text = "英語"; gridTitle.Children.Add(tbxTitleEnglish); TextBox tbxTitleMath = new TextBox(); tbxTitleMath.Text = "數學"; gridTitle.Children.Add(tbxTitleMath); gridTitle.SetValue(Grid.RowProperty, 0); gridTitle.SetValue(Grid.ColumnProperty, 0); grid.Children.Add(gridTitle); UniformGrid gridNow = new UniformGrid(); gridNow.Width = 100; gridNow.Columns = 1; //語文 TextBox tbxChinese = new TextBox(); Binding bindChinese = new Binding("Chinese"); bindChinese.StringFormat = stringF4; bindChinese.Converter = FindResource("nanConvert") as IValueConverter; tbxChinese.SetBinding(TextBox.TextProperty, bindChinese); gridNow.Children.Add(tbxChinese); //英語 TextBox tbxEnglish = new TextBox(); Binding bindEnglish = new Binding("English"); bindEnglish.StringFormat = stringF4; bindEnglish.Converter = FindResource("nanConvert") as IValueConverter; tbxEnglish.SetBinding(TextBox.TextProperty, bindEnglish); gridNow.Children.Add(tbxEnglish); //數學 TextBox tbxMath = new TextBox(); Binding bindMath = new Binding("Math"); bindMath.StringFormat = stringF4; bindMath.Converter = FindResource("nanConvert") as IValueConverter; tbxMath.SetBinding(TextBox.TextProperty, bindMath); gridNow.Children.Add(tbxMath); gridNow.SetValue(Grid.RowProperty, 0); gridNow.SetValue(Grid.ColumnProperty, 1); grid.Children.Add(gridNow); DataModel data=new DataModel(); data.Chinese = 18f; data.Math = float.NaN; data.English = 96.8f; gridNow.DataContext = data; } } public class DataModel { public float Chinese { get; set; } public float Math { get; set; } public float English { get; set; } } class NaNConvertDash : IValueConverter { public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) { try { float data = (float)value; if (float.IsNaN(data)) return "-"; else return data; } catch { return "-"; } } public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new System.NotImplementedException(); } } }
(三)代碼下載
代碼