2010-10-10 57 views
3

我有了以下簡單的XAML(沒有必要讀它 - 只是它爲參考)的文本框:問題有關數據模板或樣式在WPF XAML

<TextBox Name="m_ctrlUserDeviceType" Style="{StaticResource textStyleTextBox}" Text="{Binding Source={x:Static api:MySettings.Instance}, Path=UserDeviceType, ValidatesOnExceptions=true, NotifyOnValidationError=true}" Validation.Error="TextBox_Error" MinHeight="25" Margin="4" VerticalAlignment="Top" MaxLength="23" VerticalContentAlignment="Center" HorizontalAlignment="Left" MinWidth="100"></TextBox> 

爲了完整,風格textStyleTextBox外觀像這樣的(同樣,沒有必要讀來回答問題):

<Style x:Key="textStyleTextBox" TargetType="TextBox"> 
    <Setter Property="Foreground" Value="#333333" /> 
     <Setter Property="VerticalAlignment" Value="Top" /> 
     <Setter Property="MinHeight" Value="2" /> 
     <Setter Property="MinWidth" Value="100" /> 
     <Setter Property="Margin" Value="4" /> 
     <Setter Property="MaxLength" Value="23" /> 
     <Setter Property="VerticalContentAlignment" Value="Center" /> 
     <Setter Property="HorizontalAlignment" Value="Left" /> 
     <!-- <Setter Property="Binding Source" Value="{x:Static api:MySettings.Instance}"/> 
     <Setter Property="Binding ValidatesOnExceptions" Value="true" /> 
     <Setter Property="Binding NotifyOnValidationError" Value="true" /> --> 



    <Style.Triggers> 
    <Trigger Property="Validation.HasError" Value="true"> 
     <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, 
        Path=(Validation.Errors)[0].ErrorContent}" /> 
    </Trigger> 
    </Style.Triggers> 
</Style> 

我在款式很多的東西(MiHeight,保證金等),因爲我有很多這些文本框和他們」幾乎完全一樣。事實上,除了風格之外,還有很多共同之處。綁定到類MySettings的細節幾乎相同。唯一的區別是文本框綁定了哪個特定的屬性。另外,我總是爲Validation.Error使用TextBox_Error。

有沒有辦法將樣式或數據模板中的綁定信息,所以我不必繼續爲每個文本框輸入它?

我需要能夠爲每個文本框分配一個單獨的屬性(路徑),並且我想我仍然需要能夠在將來添加的某些特定文本框中不使用任何文本框使用數據綁定到MySettings)。

有沒有辦法將TextBox_Error的一部分放入樣式或DataTemplate中?使用Setter Property似乎不適合我。

我不斷提及數據模板,因爲我認爲答案可能與基於閱讀C#2008中的Pro Silverlight 2有關。但是,我無法弄清楚。我也嘗試在「Style」中添加內容,正如您可以從該部分的註釋內容中看到的那樣。

感謝,

戴夫

回答

4

我不認爲有一種方法可以做到你的要求。不過,我認爲你可以用不同的方式去做。

我想看的是創建一個自定義控件,它可以擴展TextBox,然後創建一些依賴屬性,當控件初始化時,設置綁定和錯誤驗證。

這樣您就可以使用您的自定義文本框在你的應用程序,並控制所有財產,甚至是他們的風格是相同的(只是改變你的風格的目標類型)

HTH

+0

感謝。我會研究這種方法。 – Dave 2010-10-13 16:15:50