Включите привязку команды для TextBlock

Я полагаю, что понимаю проблему. Исключение поймано, проблемой является беспорядок по поведению отладчика и различиям в настройках отладчика среди каждого человека, пробующего к репродукции оно.

В 3-м случае от Вашей репродукции я полагаю, что Вы получаете следующее сообщение: "NoViableAltException был не обработан пользовательским кодом" и стеком вызовов, который похож на это:

         [External Code]    
    >   TestAntlr-3.1.exe!TimeDefLexer.mTokens() Line 852 + 0xe bytes   C#
        [External Code] 
        TestAntlr-3.1.exe!TimeDefParser.prog() Line 141 + 0x14 bytes    C#
        TestAntlr-3.1.exe!TestAntlr_3._1.Program.ParseTest(string Text = "foobar;") Line 49 + 0x9 bytes C#
        TestAntlr-3.1.exe!TestAntlr_3._1.Program.Main(string[] args = {string[0x00000000]}) Line 30 + 0xb bytes C#
        [External Code] 

, Если Вы щелкаете правой кнопкой в окне стека вызовов и выполняете поворот выставленный внешний код, Вы видите это:

        Antlr3.Runtime.dll!Antlr.Runtime.DFA.NoViableAlt(int s = 0x00000000, Antlr.Runtime.IIntStream input = {Antlr.Runtime.ANTLRStringStream}) + 0x80 bytes   
        Antlr3.Runtime.dll!Antlr.Runtime.DFA.Predict(Antlr.Runtime.IIntStream input = {Antlr.Runtime.ANTLRStringStream}) + 0x21e bytes  
    >   TestAntlr-3.1.exe!TimeDefLexer.mTokens() Line 852 + 0xe bytes   C#
        Antlr3.Runtime.dll!Antlr.Runtime.Lexer.NextToken() + 0xc4 bytes 
        Antlr3.Runtime.dll!Antlr.Runtime.CommonTokenStream.FillBuffer() + 0x147 bytes   
        Antlr3.Runtime.dll!Antlr.Runtime.CommonTokenStream.LT(int k = 0x00000001) + 0x2d bytes  
        TestAntlr-3.1.exe!TimeDefParser.prog() Line 141 + 0x14 bytes    C#
        TestAntlr-3.1.exe!TestAntlr_3._1.Program.ParseTest(string Text = "foobar;") Line 49 + 0x9 bytes C#
        TestAntlr-3.1.exe!TestAntlr_3._1.Program.Main(string[] args = {string[0x00000000]}) Line 30 + 0xb bytes C#
        [Native to Managed Transition]  
        [Managed to Native Transition]  
        mscorlib.dll!System.AppDomain.ExecuteAssembly(string assemblyFile, System.Security.Policy.Evidence assemblySecurity, string[] args) + 0x39 bytes    
        Microsoft.VisualStudio.HostingProcess.Utilities.dll!Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() + 0x2b bytes  
        mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(object state) + 0x3b bytes   
        mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x81 bytes    
        mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() + 0x40 bytes

сообщение отладчика говорит Вам, что возникновение исключения вне Вашего кода (от NoViableAlt) проходит код, которым Вы владеете в TestAntlr-3.1.exe! TimeDefLexer.mTokens () без того, чтобы быть обработанным.

формулировка сбивает с толку, но это не означает, что исключение не поймано. Отладчик сообщает, что кодируют Вас, владеют mTokens ()", должно быть устойчивым против этого исключения, бросаемого через него.

Вещи играть с видеть, как это ищет тех, кто не сделал репродукции проблема:

  • Переходят к Инструментам/Опциям/Отладке и выключают, "Включают Просто Мой код (Управляемый только)". или опция.
  • Переходят к Отладчику/Исключениям и выключают "необработанный Пользователем" для Исключений Общеязыковой среды выполнения.
15
задан Dave Clemmer 8 May 2013 в 21:50
поделиться

1 ответ

Могу ли я использовать какой-то контролируемый мной элемент управления? Например, рекомендуется ли использовать кнопку и стилизовать ее так, чтобы она не выглядела как кнопка?

Да. Самый простой подход - изменить шаблон кнопки, чтобы она действовала как TextBlock, и задействовать свойство команды в классе кнопки.

Что-то вроде этого:

<ControlTemplate TargetType="Button">
        <TextBlock Text="{TemplateBinding Content}" />
    </ControlTemplate>
...
<Button Content="Foo" Command="{Binding Bar}" />
17
ответ дан 1 December 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: