2016-11-22 68 views
2

拼寫檢查器我想禁用了Windows Phone 8.1的應用程序,這是在默認情況下,在一個AutoSuggestBox拼寫檢查器,但不能期望:如何禁用的AutoSuggestBox

Screenshot of app in emulator

的控制的標記:

<AutoSuggestBox 
    Name="txtOrgunit" 
    TextChanged="txtOrgunit_TextChanged" 
    SuggestionChosen="txtOrgunit_SuggestionChosen"> 
</AutoSuggestBox> 

我怎樣才能做到這一點的IsSpellCheckEnabled財產上的內部文本框變爲假從標記或代碼?

現有的解決方案,我發現無論是處理與其它平臺上同樣的問題(是這樣的:

How can I disable the spell checker on text inputs on the iPhone

這:

how to disable spell checker for Android AutoCompleteTextView?

或者他們是笨拙的火箭科學,像這樣:

https://social.msdn.microsoft.com/Forums/windowsapps/en-US/c2139520-26e9-4a74-819d-defb4e20857c/how-to-disable-spell-check-grammer-in-autosuggestbox?forum=wpdevelop

編輯:在逐字地應用第一個答案中提出的解決方案之後,實現了OP目標,但是控件的功能被打破了(事件發生,itemssource結束了30個項目,但沒有一個顯示 - 不再顯示「下拉列表」)。因此,我給下面的txtOrgunit_TextChanged處理程序的源代碼:

private void txtOrgunit_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args) 
{ 
    if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput) 
    { 
     var ui = sender.Text.Trim().ToUpperInvariant(); 
     var matches = new List<IdAndCaption>(); 
     var count = 0; 
     for (int i = 0; i < Com.MasterdataBasic.Orgunits.Length; ++i) 
     { 
      var cand = Com.MasterdataBasic.Orgunits[i]; 
      var cap = String.Format("{0} {1}", cand.Abbrev, cand.LongCap); 
      if (cap.ToUpperInvariant().Contains(ui)) 
      { 
       var ele = new IdAndCaption() { Id = cand.OrgID, Caption = cap }; 
       matches.Add(ele); 
       ++count; 
       /* UX decided it unreasonable to have the user scroll through more... 
       * should type more letters to restrict further */ 
       if (count >= 30) break; 
      } 
     } 
     sender.ItemsSource = matches; 
     Rec.Report.OrgID = -1; 
    }  
} 

我覈實,當我從autosuggestbox刪除樣式標籤,自動提示功能恢復。

回答

2

不幸的是它似乎AutoSuggestBox控制不具有財產IsSpellCheckEnabled所以爲了做到這一點,你需要創建一個ControlTemplateTextBox控制,它包含屬性IsSpellCheckEnabled並將其設置爲那裏。

你想要做的第一件事就是在項目中創建一個ResourceDictionary如果你還沒有已經有了一個:

resourcedictionary

在這個例子中我已經給我的樣式名稱的目的.xaml

下面的代碼會給你或多或少你想要的。您可能需要調整某些Setter性能,但我已經拼湊起來這一點,你在你的問題中提供的鏈接去關的例子:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:AppNamespace"> 

<!-- modified default style for AutoSuggestBox --> 
<Style x:Name="AutoSuggestBoxStyle" TargetType="AutoSuggestBox"> 
    <Setter Property="Margin" Value="{ThemeResource TextControlMarginThemeThickness}" /> 
    <Setter Property="VerticalAlignment" Value="Top" /> 
    <Setter Property="IsTabStop" Value="False" /> 
    <Setter Property="ItemContainerStyle"> 
     <Setter.Value> 
      <Style TargetType="ListViewItem"> 
       <Setter Property="Margin" Value="{ThemeResource AutoSuggestListViewItemMargin}" /> 
       <Setter Property="FontSize" Value="{ThemeResource ContentControlFontSize}" /> 
       <Setter Property="Foreground" Value="{ThemeResource TextBoxForegroundThemeBrush}" /> 
      </Style> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="AutoSuggestBox"> 
       <Grid> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="Orientation"> 
          <VisualState x:Name="Landscape"/> 
          <VisualState x:Name="Portrait"/> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
        <TextBox x:Name="TextBox" 
         IsSpellCheckEnabled="False" 
         PlaceholderText="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=PlaceholderText}" 
         Header="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Header}" 
         Width="{TemplateBinding Width}" 
         ScrollViewer.BringIntoViewOnFocusChange="False" 
         Canvas.ZIndex="0" 
         Margin="0" /> 
        <Popup x:Name="SuggestionsPopup"> 
         <Border x:Name="SuggestionsContainer" 
           Background="{ThemeResource AutoSuggestBackgroundThemeBrush}" 
           BorderBrush="{ThemeResource PhoneAccentBrush}" 
           BorderThickness="{ThemeResource TextControlBorderThemeThickness}"> 
          <Border.RenderTransform> 
           <TranslateTransform x:Name="UpwardTransform"/> 
          </Border.RenderTransform> 
          <ListView x:Name="SuggestionsList" 
           ItemsSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ItemsSource}" 
           ItemTemplate="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ItemTemplate}" 
           ItemTemplateSelector="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ItemTemplateSelector}" 
           ItemContainerStyle="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ItemContainerStyle}" 
           RenderTransformOrigin=".5,.5"> 
           <ListView.RenderTransform> 
            <ScaleTransform x:Name="ListItemOrderTransform"/> 
           </ListView.RenderTransform> 
          </ListView> 
         </Border> 
        </Popup> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
</ResourceDictionary> 

複製XAML到Styles.xaml

您現在需要參考這個新的ResourceDictionary。這可以在您的App.xaml或頁面本身完成。

App.xaml這是你將如何引用:

<Application 
    x:Class="App6.App" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:App6"> 

    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Styles.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 

</Application> 

如果因任何原因,你不能去了XAML在App.xaml然後做<Application搜索,你應該能夠這樣做。

然後在頁面本身,你可以創建一個AutoSuggestBox和參考AutoSuggestBoxStyle

<AutoSuggestBox Style="{StaticResource AutoSuggestBoxStyle}"/> 

在我的例子,我有兩個AutoSuggestBoxes

<StackPanel> 
    <AutoSuggestBox Style="{StaticResource AutoSuggestBoxStyle}"/> 
    <AutoSuggestBox></AutoSuggestBox> 
</StackPanel> 

這是怎麼回事看我的模擬器:

emulator example

正如您所看到的頂部AutoSuggestBox哪些引用樣式不顯示紅色線條,如底部所示。

希望這會有所幫助。

+0

謝謝!我遵循你的指示,並達到我所需要的。但是現在測試失敗 - 實際的自動建議功能被打破。當我從目標自動提示框中移除樣式屬性時,它會再次運行。該模板中必須缺少一些與數據綁定相關的內容。請參閱編輯。 – dlatikay

+0

可能,該模板需要''部分...試圖弄清楚它在MSDN文章中是否被截斷......是否沒有辦法指定僅部分一個模板,並從內置繼承其餘的? – dlatikay

+0

這可能與彈出式元素有關。我直到明天都不在我的Dev機器上,所以不能做任何測試,但是當我回到它並更新我的答案時,如果我設法弄清楚,我會看看。 – Bugs