2

FlowDocumentラベルのようなコントロールに短い文字列を表示する方法を探しています。

WPF では、ユーザーはテキストを に入力できますRichTextBox。結果はFlowDocument文字列です。そのテキストを で表示する方法を探していますLabel

  1. ユーザーは、テキストを (マウスで) 編集または選択できないようにする必要があります。
  2. スクロール バーはありません。通常のラベルと同様に、コントロールはすべてのテキストに対応するように拡張する必要があります。
  3. マウスがラベル上にあるときにユーザーがスクロールする場合、スクロールする必要があるコントロールはコントロールの親です
  4. コントロールはできるだけ軽量にする必要があります。

継承する次の実装FlowDocumentScrollViewerがありますが、より良い実装が必要であると確信しています (おそらく 以外のコントロールを継承していますFlowDocumentScrollViewer)。

public class FlowDocumentViewer : FlowDocumentScrollViewer
{
    public FlowDocumentViewer()
    {
        this.SetValue(ScrollViewer.CanContentScrollProperty, false);
        this.SetValue(ScrollViewer.VerticalScrollBarVisibilityProperty, ScrollBarVisibility.Hidden);
        this.Padding = new Thickness(-17);
        this.Document = new FlowDocument();
    }

    protected override void OnMouseWheel(MouseWheelEventArgs e)
    {
        e.Handled = false;
    }

    public string Text
    {
        get { return (string)GetValue(TextProperty); }
        set { SetValue(TextProperty, value); }
    }

    public static readonly DependencyProperty TextProperty =
        DependencyProperty.Register("Text", typeof(string), typeof(FlowDocumentViewer), new UIPropertyMetadata(string.Empty, TextChangedHandler));

    private static void TextChangedHandler(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        if (e.NewValue.Equals(string.Empty))
            return;
        FlowDocumentViewer fdv = (FlowDocumentViewer)d;
        fdv.Document.Blocks.Clear();

        using (MemoryStream stream = new MemoryStream(UTF8Encoding.UTF8.GetBytes(e.NewValue.ToString())))
        {
            Section content = XamlReader.Load(stream) as Section;
            fdv.Document.Blocks.Add(content);
        }
    }
}
4

2 に答える 2

0

IsReadOnly を設定してみましたか?

    <RichTextBox  IsReadOnly="True"/>
于 2011-07-22T22:25:14.067 に答える
0

この XAML は、すべての要件を満たしていると思います。ユーザーコントロールを作成するのは簡単です。のFlowDocumentプロパティを設定する依存関係プロパティを実装するだけです。RichTextBoxDocument

以下に表示されているもののほとんどは、Kaxaml などに貼り付けたときにどのように機能するかを確認できるように、単なるギリシャ語のテキストです。そのコアは、マウスイベントやキーストロークをキャプチャしないように、その上に 透明なGridを含むです。RichTextBoxBorder

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <DockPanel Margin="100">
    <ScrollViewer>
      <StackPanel>
        <Grid>  
          <RichTextBox Background="Coral">
            <FlowDocument>
              <Paragraph>
                Gluten-free pariatur exercitation laboris, salvia nisi excepteur. Elit quis PBR, jean shorts DIY excepteur tofu retro. Nulla art party farm-to-table, banh mi labore wes anderson marfa Austin portland carles tattooed 8-bit. Skateboard farm-to-table sed, lomo proident iphone mustache. Keffiyeh magna freegan mollit. Seitan viral consequat elit deserunt, occaecat vero tempor. Terry richardson esse mollit, anim chambray DIY squid.          </Paragraph>
            </FlowDocument>
          </RichTextBox>
          <Border Background="Transparent"/>
        </Grid>
        <Grid>  
          <RichTextBox Background="AliceBlue">
            <FlowDocument>
              <Paragraph>
                Marfa locavore duis, chambray homo irure culpa et high life skateboard. Readymade sartorial odio deserunt. Dolore placeat scenester reprehenderit tattooed nisi. DIY fugiat tempor raw denim. Incididunt sapiente echo park ut yr, deserunt non williamsburg quis. Pitchfork nihil nisi etsy next level elit minim eu, id twee vero exercitation wes anderson. Ullamco beard delectus, before they sold out homo aliquip craft beer esse cillum mlkshk.          </Paragraph>
            </FlowDocument>
          </RichTextBox>
          <Border Background="Transparent"/>
        </Grid>
        <Grid>  
          <RichTextBox Background="Goldenrod">
            <FlowDocument>
              <Paragraph>
                Laborum cliche quinoa odio nostrud Austin, dolor 3 wolf moon craft beer brunch ex vice. Excepteur ullamco fugiat, shoreditch assumenda squid sapiente craft beer viral vice non incididunt tempor. Ullamco gluten-free veniam, elit fugiat sustainable thundercats wolf fap Austin id nihil viral. Sartorial photo booth Austin, pitchfork labore PBR nisi cardigan dolore. Seitan dolor letterpress, banksy organic biodiesel tattooed aliqua. Letterpress ea 3 wolf moon, cosby sweater williamsburg ethical portland reprehenderit wayfarers nostrud beard laboris. Blog ethical trust fund, quinoa vegan skateboard sed art party messenger bag biodiesel do.        
              </Paragraph>
            </FlowDocument>
          </RichTextBox>
          <Border Background="Transparent"/>
        </Grid>
        <Grid>  
          <RichTextBox Background="AntiqueWhite">
            <FlowDocument>
              <Paragraph>
                 Assumenda ad aute cred est. Beard elit fugiat brunch, proident nulla 8-bit. Cardigan sapiente 8-bit tempor put a bird on it duis lo-fi. VHS before they sold out commodo, occaecat raw denim artisan dolor photo booth ex gentrify proident readymade ad. Artisan duis thundercats ex, 8-bit ut williamsburg portland seitan cred vinyl brooklyn. Aute deserunt beard cliche, you probably haven't heard of them commodo artisan tumblr irony put a bird on it VHS excepteur american apparel. Voluptate PBR artisan ut banksy, nostrud organic vero fap anim american apparel trust fund do exercitation.          </Paragraph>
            </FlowDocument>
          </RichTextBox>
          <Border Background="Transparent"/>
        </Grid>
      </StackPanel>
    </ScrollViewer>
    <TextBlock/>
  </DockPanel>
</Page>
于 2011-08-25T18:54:10.467 に答える