2014-12-21 2 views
0

잃어 버렸습니다. SO :제스처를 사용하여 customcontrol의 내용을 변경하는 방법?

다음 코드는 내 customcontrol 인 ccGistaFigure를 통해 텍스트 줄을 올바르게 표시합니다. 이제 InkCanvas를 컨트롤 위에 놓습니다. 처음에는 InkCanvas가 제스처 만 인식하도록 설정됩니다.

내가 알아 내려고하는 것은 특정 제스처를 받으면 InkCanvas가 customcontrol에 자체 변경을 알릴 수 있는지 또는 XAML을 다른 ccGistaFigure 개체에 대해 ccGistaFigure 밖으로 스왑하는 방법이 있습니까?

특히 InkCanvas에서 한 단어를 탭하면 내가 쳤던 단어를 확인하고 customcontrol에 해당 단어의 문자 사이에 공백을 추가 할 수 있기를 원합니다. 따라서 단어가 "테스트 중"이면 단어 위로 탭 (또는 제스처)을하면 텍스트가 "T_e_s_t_i_n_g"로 변경됩니다.

(ccGistaFigure는 FrameworkElement에서 파생되며 FormattedText 개체에서 직접 문자열을 표시합니다).

내가 탭 한 단어를 결정할 수 있다고 가정하면 디스플레이를 변경하는 가장 좋은 방법은 무엇입니까?

나의 현재 XAML은 다음과 같습니다

<UserControl x:Class="Nova5.UI.Views.Ink.InkEditorView" 
     ..... 

<Grid Background="#FFE24848" > 

    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="3*"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition/> 
     <RowDefinition/> 
     <RowDefinition/> 
     <RowDefinition/> 
    </Grid.RowDefinitions> 
     <Canvas Grid.Row="1" Grid.RowSpan="3"> 

     <ScrollViewer VerticalScrollBarVisibility="Auto" 
      Width="{Binding Parent.ActualWidth, Mode=OneWay, RelativeSource={RelativeSource Self}}" 
      Height="{Binding Parent.ActualHeight, Mode=OneWay, RelativeSource={RelativeSource Self}}" 
       > 
      <Grid Background="White" > 
       <Grid.RowDefinitions> 
        <RowDefinition/> 
        <RowDefinition Height="100"/> 
       </Grid.RowDefinitions> 
       <wc:ccGistaFigure Grid.Row="0" 
            Text="{Binding Text, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}" 
            LineHeight="{Binding LineHeight, UpdateSourceTrigger=PropertyChanged,Mode=OneWayToSource}" 
            AscenderlineOffset="{Binding AscenderlineOffset, UpdateSourceTrigger=PropertyChanged,Mode=OneWayToSource}" 
            DescenderlineOffset="{Binding DescenderlineOffset, UpdateSourceTrigger=PropertyChanged,Mode=OneWayToSource}" 
            MidlineOffset="{Binding MidlineOffset,UpdateSourceTrigger=PropertyChanged,Mode=OneWayToSource}" 
            BaselineOffset="{Binding BaselineOffset, UpdateSourceTrigger=PropertyChanged, Mode=OneWayToSource}" 
            WritingPadSize="{Binding WritingPadSize, UpdateSourceTrigger=PropertyChanged, Mode=OneWayToSource}" 
            /> 


       <InkCanvas Grid.Row="0" Grid.RowSpan="2" 
        Background="Transparent" 
        DefaultDrawingAttributes="{Binding Pen}" 
        EditingMode="{Binding EditingMode}" 
        Strokes="{Binding Strokes}" /> 

      </Grid> 
     </ScrollViewer> 
    </Canvas> 

</Grid> 
</UserControl> 

어떤 생각이 가장 높이 평가입니다. 감사.

<wc:ccGistaFigure 
    x:Name="gistaFigure" 
    TouchDown="TouchEventHandler" 
    IsManipulationEnabled="true" ../> 

및 코드 숨김이 정의 : 당신이 ccGistaFigure에 터치 이벤트를 사용하려면

+0

이 좀 불분명 무엇 정확히 묻고 있습니다 : 편지를 실제로 '확장'하는 데 문제가 있습니까? 아니면 "이봐, ccGistaFigure를 클릭 했어"라는 이벤트에 문제가 생겼습니까? 아니면 다른 문제가 있습니까? –

+0

@ChrisEelmaa 실제로 위의 모든 문제가 있지만, 대체로 텍스트가 변경된 두 번째 ccGistaFigure로 첫 번째 ccGistaFigure를 "전환"하는 XAML 방식을 기대했습니다. 가장 큰 문제는 정확히 어떤 캐릭터를 클릭했는지 판단하는 것입니다. (참고 : 펜으로 InkCanvas에서 제공하는 "제스처"를 사용합니다.) 감사. –

+0

"가장 큰 문제는 정확히 어떤 캐릭터를 클릭했는지 판단하는 것입니다." 왜 그걸 알아야 해? 나는 우리가 말을하고 있다고 생각했다. –

답변

1

, 그렇게해야 할 것

private void TouchEventHandler(object sender, TouchEventArgs e) 
{ 
    gistaFigure.InternalText = string.Join("_", gistaFigure.Text.ToCharArray()) 
} 
+0

감사합니다. 당신은 이것의 첫 부분에 대답했습니다 - 이벤트를 사용하십시오. gistaFigure는 FrameworkElement 타입이며, Text 의존성 프로퍼티를 의미하지 않는다면 "InternalText"는 없습니다. 감사. –

+0

@ AlanWayne : 질문이 꽤 광범위하기 때문에 대답하기가 어렵습니다. 'Text'는 실제 바인딩을 덮어 쓰기 때문에 변경할 수 없습니다. 동일한 터치 이벤트가 단어를 "함께"다시 불러올 기능이 필요합니까? M_Y_W_O_R_D => 클릭 후 MYWORD? 어쨌든 당신이하는 일은 ccGistaFigure를 사용자 정의 컨트롤 안에 배치하거나 연결된 속성을 작성하는 것입니다. –