我需要在WPF中創建自定義文本框和文本框將有一些數字和字符串「%每年」像「55%每年」。用戶應該只能改變文本框中的數字,我想保持字符串「%Per Annum」不可編輯。請幫幫我。自定義文本框與固定內容的一部分
1
A
回答
1
在WPF中,您可以修改控件的模板以在保持功能的同時完全改變外觀。在您的情況下,您可以通過在控件邊框內添加一些額外的文本來修改TextBox
的控件模板。
在Visual Studio中,向您的XAML添加一個TextBox
。然後在文檔大綱你可以右鍵點擊該TextBox
並選擇編輯模板 =>編輯副本...。然後將一個Style
的TextBox
添加到您的XAML中,其中包含默認TextBox
使用的ControlTemplate
的副本。然後,您可以隨意修改模板。
TextBox
的主要部分是ListBoxChrome
邊界內的ScrollViewer
。爲了得到你想要的結果,你可以用兩列將ScrollViewer
包裝在一個Grid
中,然後在第二列中放置帶有文本「%Per Annum」的TextBlock
。您可能還想要對齊TextBox
中的文本,並且默認情況下可以通過將HorizontalContentAlignment
設置爲Right
,TextBox
的Style
來實現。
這裏就是我增加了一些意見,看看在那裏我所做的編輯一個完整的示例XAML:
<Window
x:Class="WpfApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<LinearGradientBrush x:Key="TextBoxBorder" EndPoint="0,20" MappingMode="Absolute" StartPoint="0,0">
<GradientStop Color="#ABADB3" Offset="0.05"/>
<GradientStop Color="#E2E3EA" Offset="0.07"/>
<GradientStop Color="#E3E9EF" Offset="1"/>
</LinearGradientBrush>
<Style x:Key="PerAnnumTextBoxStyle" BasedOn="{x:Null}" TargetType="{x:Type TextBox}">
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
<Setter Property="BorderBrush" Value="{StaticResource TextBoxBorder}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="AllowDrop" Value="true"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>
<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
<!-- New setter -->
<Setter Property="HorizontalContentAlignment" Value="Right"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Themes:ListBoxChrome x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderFocused="{TemplateBinding IsKeyboardFocusWithin}" SnapsToDevicePixels="true">
<!-- ScrollViewer wrapped in a Grid -->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
<TextBlock Grid.Column="1" Margin="0,1"> % Per Annum</TextBlock>
</Grid>
</Themes:ListBoxChrome>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsInactiveSelectionHighlightEnabled" Value="true"/>
<Condition Property="IsSelectionActive" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="SelectionBrush" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/>
</MultiTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<StackPanel>
<TextBox Text="50" Style="{StaticResource PerAnnumTextBoxStyle}" Width="100" HorizontalAlignment="Left"/>
</StackPanel>
</Window>
0
最簡單的,在我的opionion更好的辦法是把文本框裏面StackPanel
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding Path=MyTextProperty}"/>
<Label Content="55% Per Annum" />
</StackPanel>
相關問題
- 1. 固定鏈接自定義類型後與自定義分類
- 2. 內容固定在底部
- 3. 以自定義格式獲取文本框的內容
- 4. Windows手機自定義文本框 - 無SIP /僅刪除內容
- 5. 自定義facebook的分享內容
- 6. 滾動固定位置容器中的部分內容
- 7. WPF自定義文本框
- 8. 文本框自定義onPaint
- 9. WPF自定義文本框
- 10. 谷歌地圖自定義內容框?
- 11. Wordpress自定義類型固定鏈接與自定義分類slu 012
- 12. 內容:固定是頑固
- 13. 固定的Topbar和內容分區
- 14. 在facebook上分享自定義內容
- 15. 使用自定義字體作爲文本的一部分
- 16. 與自定義控件Silverlight的文本框的文本
- 17. 修改FS/binfmt_elf.c獲取自定義添加的部分內容
- 18. 自定義內容部分的包裝 - 果園CMS
- 19. 文本框中的固定文本
- 20. 與「位置:固定」重疊的內容
- 21. 將內容自動調整爲固定大小文本框控件
- 22. 自定義內容類型:XLink與Atom
- 23. Fabricjs固定文本框
- 24. C#自定義控件:使用內部內容的文本字段
- 25. 有兩種不同顏色的(內部和外部)的自定義文本框
- 26. CSS固定頭部和浮動內容
- 27. 在Android屏幕底部固定內容
- 28. 將自定義類型的自定義字段顯示爲要編輯的固定文本框?
- 29. 如何自定義組合框內的複選框文本?
- 30. 自定義控件與內部HTML C#
這聽起來像一個漂亮的非標準用戶界面,因此(相對)昂貴。單位能否以更平臺標準的方式生活在文本框之外? –