我在银光应用程序中使用NumericUpDown控件。代码如下
<StackPanel Style="{StaticResource StackPanelStyle_LableValue}">
<TextBlock Text="{Binding Path=ViewItem.Strength, Source={StaticResource LocalizedStrings }}" Style="{StaticResource TextBlockStyle}" />
<inputToolkit:NumericUpDown Style="{StaticResource NumericUpdownStyle_Strength}"
Value="{Binding RightSpecGlassStrength, Mode=TwoWay, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}"
TabIndex="5" />
</StackPanel>
和我绑定到NumericUpDown控件的样式如下
<Style x:Key="NumericUpdownStyle_Strength" TargetType="inputToolkit:NumericUpDown">
<Setter Property="Width" Value="Auto"></Setter>
<Setter Property="MinWidth" Value="50"></Setter>
<Setter Property="Height" Value="20"></Setter>
<Setter Property="Minimum" Value="-28"></Setter>
<Setter Property="Maximum" Value="28"></Setter>
<Setter Property="BorderThickness" Value="0"></Setter>
<Setter Property="BorderBrush" Value="White"></Setter>
<Setter Property="DecimalPlaces" Value="2"></Setter>
<Setter Property="Increment" Value="0.25"></Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="inputToolkit:NumericUpDown">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0"/>
</VisualStateGroup.Transitions>
<VisualState x:Name="Normal"/>
<VisualState x:Name="Disabled">
<Storyboard>
<DoubleAnimation Duration="0" Storyboard.TargetName="DisabledVisualElement" Storyboard.TargetProperty="(UIElement.Opacity)" To="1"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="FocusStates">
<VisualState x:Name="Focused">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="FocusVisualElement" Storyboard.TargetProperty="Opacity">
<SplineDoubleKeyFrame KeyTime="0" Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Unfocused"/>
</VisualStateGroup>
<VisualStateGroup x:Name="ValidationStates">
<VisualState x:Name="Valid"/>
<VisualState x:Name="InvalidUnfocused">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ValidationErrorElement" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="InvalidFocused">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ValidationErrorElement" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="validationTooltip" Storyboard.TargetProperty="IsOpen">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<sys:Boolean>True</sys:Boolean>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<inputToolkit:ButtonSpinner x:Name="Spinner" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" MinWidth="35">
<StackPanel Background="White" Orientation="Horizontal" HorizontalAlignment="Right" Width="Auto">
<TextBox x:Name="Text" Style="{StaticResource TextBoxStyle}" TabIndex="0"
BorderThickness="0" FontFamily="{TemplateBinding FontFamily}" FontSize="{TemplateBinding FontSize}" FontStretch="{TemplateBinding FontStretch}" FontStyle="{TemplateBinding FontStyle}" FontWeight="{TemplateBinding FontWeight}" Foreground="{TemplateBinding Foreground}" MinWidth="50" Width="Auto" AcceptsReturn="False" Text="{TemplateBinding Value}" TextAlignment="Left" TextWrapping="NoWrap"/>
</StackPanel>
</inputToolkit:ButtonSpinner>
<Border x:Name="DisabledVisualElement" IsHitTestVisible="false" Opacity="0" Background="#A5FFFFFF" CornerRadius="2.5,2.5,2.5,2.5"/>
<Border x:Name="FocusVisualElement" IsHitTestVisible="False" Opacity="0" BorderBrush="#FF45D6FA" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="1,1,1,1"/>
<Border x:Name="ValidationErrorElement" Visibility="Collapsed" BorderBrush="#FFDB000C" BorderThickness="1" CornerRadius="1">
<ToolTipService.ToolTip>
<ToolTip x:Name="validationTooltip" Height="Auto" Width="Auto" Template="{StaticResource ValidationToolTipTemplate}" DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}" Placement="Right" PlacementTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}">
<ToolTip.Triggers>
<EventTrigger RoutedEvent="Canvas.Loaded">
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="validationTooltip" Storyboard.TargetProperty="IsHitTestVisible">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<sys:Boolean>true</sys:Boolean>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</ToolTip.Triggers>
</ToolTip>
</ToolTipService.ToolTip>
<Grid Height="12" HorizontalAlignment="Right" Margin="1,-4,-4,0" VerticalAlignment="Top" Width="12" Background="Transparent">
<Path Fill="#FFDC000C" Margin="1,3,0,0" Data="M 1,0 L6,0 A 2,2 90 0 1 8,2 L8,7 z"/>
<Path Fill="#ffffff" Margin="1,3,0,0" Data="M 0,0 L2,0 L 8,6 L8,8"/>
</Grid>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我在使用上面的代码运行应用程序构建时发现了错误。
要解决该错误,我想要读取在 App.xaml <的样式中定义的<inputToolkit:ButtonSpinner > </inputToolkit:ButtonSpinner >
“Text”中定义的TextBox的读取值/ strong>用于NumericUpDown控件。
如何在运行时从 ValueChainging / ValueChanged / GotFocus / LostFocust 或NumericUpDown控件的任何其他事件中读取textBox中的值。
答案 0 :(得分:0)
您可以向内部TextBox
模板添加事件处理程序。我不记得了,你可以在模板上添加它,但我敢肯定,你可以创建这样的风格
<Style x:Key="MyTextBoxStyle" TargetType="{x:Type TextBox}">
<EventSetter Event="ValueChainging" Handler="PathName_KeyDown" />
<EventSetter Event="LostFocust" Handler="GiveFocusToMe" />
....
</Style>
然后将其应用到TextBox,放入BreakPoints并查看所需的所有详细信息
答案 1 :(得分:0)
我已将LostFocus事件添加到<inputToolkit:ButtonSpinner > </inputToolkit:ButtonSpinner >
内的文本框中,并且在事件中我编写了代码来实现我的逻辑。 :)
如下所示我的TextBox看起来像
<TextBox x:Name="Text" Style="{StaticResource TextBoxStyle}" TabIndex="{TemplateBinding TabIndex}"
BorderThickness="0" FontFamily="{TemplateBinding FontFamily}" FontSize="{TemplateBinding FontSize}" FontStretch="{TemplateBinding FontStretch}" FontStyle="{TemplateBinding FontStyle}" FontWeight="{TemplateBinding FontWeight}" Foreground="{TemplateBinding Foreground}" MinWidth="50" Width="Auto" AcceptsReturn="False" Text="{TemplateBinding Value}" TextAlignment="Right" TextWrapping="NoWrap" LostFocus="Text_LostFocus"/>
答案 2 :(得分:0)
您的inputToolkit:ButtonSpinner
控件在模板中有一个名称,即Spinner
因此使用它可以获得如下控件(仅在Visual Tree完全形成后,例如在Load事件之后)...
var mySpinner = myNumericUpDownControl.Template.FindName("Spinner", myNumericUpDownControl)
您的myNumericUpDownControl
可以在XAML中直接命名为myNumericUpDownControl
,或者您可以通过附加行为从中提取微调控件。无论您做出何种决定,请确保在完全形成VisualTree后执行此操作,否则FindName
将失败。
如果有帮助,请告诉我。