2011-08-18 2 views
0

실버 라이트 애플리케이션에서 NumericUpDown 컨트롤을 사용하고 있습니다. 위의 코드를 사용하여 위해 appliction 빌드를 실행하는 동안 나는 버그를 발견Silverlight에서 스타일 내부에서 정의 된 컨트롤의 속성을 읽는 방법.

<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> 

을 다음과 같이 내가 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> 

과 스타일을 다음과 같이 코드입니다.

는 내가 텍스트 상자가 <inputToolkit:ButtonSpinner > </inputToolkit:ButtonSpinner >"텍스트"내부에 정의 된 입력 된 값을 읽어 원하는 버그를 해결하기 위해는 NumericUpDown 컨트롤에 대한 스타일 App.xaml에 정의.

ValueChainging/ValueChanged/GotFocus/LostFocust 또는 NumericUpDown 컨트롤의 다른 이벤트에서 런타임에 textBox의 값을 어떻게 읽습니까?

답변

0

<inputToolkit:ButtonSpinner > </inputToolkit:ButtonSpinner > 안에있는 텍스트 상자에 LostFocus 이벤트를 추가했으며 이벤트에서 로직을 구현하는 코드를 작성했습니다. :)

내 텍스트 상자가

<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"/> 
0

TextBox 템플릿에 이벤트 처리기를 추가 할 수 있습니다. 나는 기억하지 못하는 당신은 템플릿에 추가 할 수 있습니다,하지만 난 당신이

<Style x:Key="MyTextBoxStyle" TargetType="{x:Type TextBox}"> 
    <EventSetter Event="ValueChainging" Handler="PathName_KeyDown" /> 
    <EventSetter Event="LostFocust" Handler="GiveFocusToMe" /> 
    .... 
</Style> 

같은 스타일을 만들 수 있다는 것을 확신하고, 당신의 텍스트 상자에 적용 중단 점을 넣어 당신이

을 필요로하는 모든 세부 사항을 볼보다
0

귀하의 inputToolkit:ButtonSpinner 컨트롤 모양을 다음과 같이하면 즉 Spinner

그래서 당신은 단지 시각적 후 (아래 컨트롤을 얻을 수 사용하여 템플릿에 이름을 가지고 나무는 완전히 ... Load 이벤트) 이후로 형성되어

var mySpinner = myNumericUpDownControl.Template.FindName("Spinner", myNumericUpDownControl) 
myNumericUpDownControl 직접로 명명 될 수 있습니다

XAML에서을 사용하거나 스피너 컨트롤을 추출 할 수있는 동작을 첨부 할 수 있습니다. 어떤 결정을 내리 든간에 VisualTree가 완전히 구성된 후이를 수행하십시오. 그렇지 않으면 FindName이 실패합니다.

도움이 될지 알려주세요.

관련 문제