Span in Contentpresenter not working properly












0














I have stumbled upon a small problem and I'm not sure how to avoid it or work around it and whether it's a bug or a "feature".



When rendering a span with text in it, it seems to be disconnected from the logical tree when using a content presenter to render it. It does not bubble IsMouseOver (or probably any event) and Hyperlinks inside the span also won't fire any associated code.



<ContentPresenter>
<ContentPresenter.Content>
<!--Normally this would be a binding, but it behaves the same.-->
<Span>
Test <Hyperlink Click="Hyperlink_OnClick">Testlink</Hyperlink>
</Span>
</ContentPresenter.Content>
</ContentPresenter>


Inspecting the visual tree with Snoop indeed shows that the TextBlock used to display the span does not receive IsMouseOver-Events from it's inline elements while they themselves do indeed register them correctly (when you expand the inline property and navigate to them; they just refuse to pass them on). Also when attaching a message box to the click handler, nothing happens when you click on the link.



<TextBlock Grid.Row="1">
<Span>
Test <Hyperlink Click="Hyperlink_OnClick">Testlink</Hyperlink>
</Span>
</TextBlock>


This one on the other hand works as expected. The IsMouseOver works fine and even the Link works.



The premise of my problem is, that I want to dynamically bind the text of the TextBlock to something. But I can't bind the text-property to a span directly so I'm using a content presenter which does the job (but is broken). Is this a bug or some feature/implication that I'm unaware of? And is there another way to bind a span to something to display it with working event handling & hyperlink clicks?










share|improve this question





























    0














    I have stumbled upon a small problem and I'm not sure how to avoid it or work around it and whether it's a bug or a "feature".



    When rendering a span with text in it, it seems to be disconnected from the logical tree when using a content presenter to render it. It does not bubble IsMouseOver (or probably any event) and Hyperlinks inside the span also won't fire any associated code.



    <ContentPresenter>
    <ContentPresenter.Content>
    <!--Normally this would be a binding, but it behaves the same.-->
    <Span>
    Test <Hyperlink Click="Hyperlink_OnClick">Testlink</Hyperlink>
    </Span>
    </ContentPresenter.Content>
    </ContentPresenter>


    Inspecting the visual tree with Snoop indeed shows that the TextBlock used to display the span does not receive IsMouseOver-Events from it's inline elements while they themselves do indeed register them correctly (when you expand the inline property and navigate to them; they just refuse to pass them on). Also when attaching a message box to the click handler, nothing happens when you click on the link.



    <TextBlock Grid.Row="1">
    <Span>
    Test <Hyperlink Click="Hyperlink_OnClick">Testlink</Hyperlink>
    </Span>
    </TextBlock>


    This one on the other hand works as expected. The IsMouseOver works fine and even the Link works.



    The premise of my problem is, that I want to dynamically bind the text of the TextBlock to something. But I can't bind the text-property to a span directly so I'm using a content presenter which does the job (but is broken). Is this a bug or some feature/implication that I'm unaware of? And is there another way to bind a span to something to display it with working event handling & hyperlink clicks?










    share|improve this question



























      0












      0








      0







      I have stumbled upon a small problem and I'm not sure how to avoid it or work around it and whether it's a bug or a "feature".



      When rendering a span with text in it, it seems to be disconnected from the logical tree when using a content presenter to render it. It does not bubble IsMouseOver (or probably any event) and Hyperlinks inside the span also won't fire any associated code.



      <ContentPresenter>
      <ContentPresenter.Content>
      <!--Normally this would be a binding, but it behaves the same.-->
      <Span>
      Test <Hyperlink Click="Hyperlink_OnClick">Testlink</Hyperlink>
      </Span>
      </ContentPresenter.Content>
      </ContentPresenter>


      Inspecting the visual tree with Snoop indeed shows that the TextBlock used to display the span does not receive IsMouseOver-Events from it's inline elements while they themselves do indeed register them correctly (when you expand the inline property and navigate to them; they just refuse to pass them on). Also when attaching a message box to the click handler, nothing happens when you click on the link.



      <TextBlock Grid.Row="1">
      <Span>
      Test <Hyperlink Click="Hyperlink_OnClick">Testlink</Hyperlink>
      </Span>
      </TextBlock>


      This one on the other hand works as expected. The IsMouseOver works fine and even the Link works.



      The premise of my problem is, that I want to dynamically bind the text of the TextBlock to something. But I can't bind the text-property to a span directly so I'm using a content presenter which does the job (but is broken). Is this a bug or some feature/implication that I'm unaware of? And is there another way to bind a span to something to display it with working event handling & hyperlink clicks?










      share|improve this question















      I have stumbled upon a small problem and I'm not sure how to avoid it or work around it and whether it's a bug or a "feature".



      When rendering a span with text in it, it seems to be disconnected from the logical tree when using a content presenter to render it. It does not bubble IsMouseOver (or probably any event) and Hyperlinks inside the span also won't fire any associated code.



      <ContentPresenter>
      <ContentPresenter.Content>
      <!--Normally this would be a binding, but it behaves the same.-->
      <Span>
      Test <Hyperlink Click="Hyperlink_OnClick">Testlink</Hyperlink>
      </Span>
      </ContentPresenter.Content>
      </ContentPresenter>


      Inspecting the visual tree with Snoop indeed shows that the TextBlock used to display the span does not receive IsMouseOver-Events from it's inline elements while they themselves do indeed register them correctly (when you expand the inline property and navigate to them; they just refuse to pass them on). Also when attaching a message box to the click handler, nothing happens when you click on the link.



      <TextBlock Grid.Row="1">
      <Span>
      Test <Hyperlink Click="Hyperlink_OnClick">Testlink</Hyperlink>
      </Span>
      </TextBlock>


      This one on the other hand works as expected. The IsMouseOver works fine and even the Link works.



      The premise of my problem is, that I want to dynamically bind the text of the TextBlock to something. But I can't bind the text-property to a span directly so I'm using a content presenter which does the job (but is broken). Is this a bug or some feature/implication that I'm unaware of? And is there another way to bind a span to something to display it with working event handling & hyperlink clicks?







      wpf






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Dec 27 '18 at 15:24









      mm8

      81.4k81831




      81.4k81831










      asked Dec 27 '18 at 14:53









      CShark

      8091121




      8091121
























          1 Answer
          1






          active

          oldest

          votes


















          2














          You could use a converter that returns a TextBlock with the Span added to its Inlines collection:



          public class MyConverter : IValueConverter
          {
          public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
          {
          Span span = value as Span;
          TextBlock textBlock = new TextBlock();
          textBlock.Inlines.Add(span);
          return textBlock;
          }

          public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
          {
          throw new NotSupportedException();
          }
          }


          XAML:



          <ContentPresenter Content="{Binding Span, Converter={StaticResource MyConverter}}" />





          share|improve this answer





















          • Well, it works. Even though nobody seems to know why....
            – CShark
            Dec 28 '18 at 17:29











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53946925%2fspan-in-contentpresenter-not-working-properly%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          2














          You could use a converter that returns a TextBlock with the Span added to its Inlines collection:



          public class MyConverter : IValueConverter
          {
          public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
          {
          Span span = value as Span;
          TextBlock textBlock = new TextBlock();
          textBlock.Inlines.Add(span);
          return textBlock;
          }

          public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
          {
          throw new NotSupportedException();
          }
          }


          XAML:



          <ContentPresenter Content="{Binding Span, Converter={StaticResource MyConverter}}" />





          share|improve this answer





















          • Well, it works. Even though nobody seems to know why....
            – CShark
            Dec 28 '18 at 17:29
















          2














          You could use a converter that returns a TextBlock with the Span added to its Inlines collection:



          public class MyConverter : IValueConverter
          {
          public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
          {
          Span span = value as Span;
          TextBlock textBlock = new TextBlock();
          textBlock.Inlines.Add(span);
          return textBlock;
          }

          public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
          {
          throw new NotSupportedException();
          }
          }


          XAML:



          <ContentPresenter Content="{Binding Span, Converter={StaticResource MyConverter}}" />





          share|improve this answer





















          • Well, it works. Even though nobody seems to know why....
            – CShark
            Dec 28 '18 at 17:29














          2












          2








          2






          You could use a converter that returns a TextBlock with the Span added to its Inlines collection:



          public class MyConverter : IValueConverter
          {
          public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
          {
          Span span = value as Span;
          TextBlock textBlock = new TextBlock();
          textBlock.Inlines.Add(span);
          return textBlock;
          }

          public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
          {
          throw new NotSupportedException();
          }
          }


          XAML:



          <ContentPresenter Content="{Binding Span, Converter={StaticResource MyConverter}}" />





          share|improve this answer












          You could use a converter that returns a TextBlock with the Span added to its Inlines collection:



          public class MyConverter : IValueConverter
          {
          public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
          {
          Span span = value as Span;
          TextBlock textBlock = new TextBlock();
          textBlock.Inlines.Add(span);
          return textBlock;
          }

          public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
          {
          throw new NotSupportedException();
          }
          }


          XAML:



          <ContentPresenter Content="{Binding Span, Converter={StaticResource MyConverter}}" />






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Dec 27 '18 at 15:16









          mm8

          81.4k81831




          81.4k81831












          • Well, it works. Even though nobody seems to know why....
            – CShark
            Dec 28 '18 at 17:29


















          • Well, it works. Even though nobody seems to know why....
            – CShark
            Dec 28 '18 at 17:29
















          Well, it works. Even though nobody seems to know why....
          – CShark
          Dec 28 '18 at 17:29




          Well, it works. Even though nobody seems to know why....
          – CShark
          Dec 28 '18 at 17:29


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53946925%2fspan-in-contentpresenter-not-working-properly%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Mossoró

          Error while reading .h5 file using the rhdf5 package in R

          Pushsharp Apns notification error: 'InvalidToken'