1

リボン コントロールのテキスト ボックスに問題があるようです。私は一般的な TextBox コントロールの動作を期待していました: 幅が固定され、テキストが幅を超えたときにキャレットが表示されます。しかし、RibbonTextBox コントロールはその幅を変更し、テキストが右側の制限を超えると、オーバーフローは表示されません。

ブログで次のようなハックを見つけました。

var img = SearchButton.Template.FindName("image", SearchButton);
if (img != null && img is Image)
   (img as Image).Visibility = Visibility.Collapsed;
var lbl = FindTemplateControl<Label>(SearchText);

var border = SearchText.Template.FindName("Bd", SearchText);

if (border != null && border is Border && img != null && lbl != null)
{
    (border as Border).Width = SearchText.ActualWidth - (((Image)img).ActualWidth + lbl.ActualWidth);
}

しかし、私は本当にそのような回避策を実行したくありません。シンプルな TextBox の動作を達成するための他の簡単な方法はありますか?

4

4 に答える 4

11

デザイナーには表示されませんが、XAML でも使用できるプロパティ "TextBoxWidth" があります。

<ribbon:RibbonTextBox Label="abc" TextBoxWidth="300" />
于 2011-09-02T15:12:25.037 に答える
1

次のように幅を設定できます。

var textBox = new RibbonTextBox() { Label = "Label", Text = "Text", TextBoxWidth = 150 };

于 2010-10-23T12:27:57.380 に答える
1

どうやら、RibbonTextBox は単純な TextBox ではありません。実際には、画像 + ラベル + ボーダーのスタックパネルです。実際、そのテンプレートには次の内容があります。

<RibbonTextBox>
    <StackPanel>
        <Image/>
        <Label>
            <Border>
                <ContentPresenter>
                    <TextBlock/>
                </ContentPresenter>
            </Border>
        </Label>
        <Border>
            <ScrollViewer>
                <Grid>
                    <Rectangle>
                    </Rectangle>
                    <ScrollContentPresenter>
                        <TextBoxView>
                            <DrawingVisual/>
                        </TextBoxView>
                        <AdornerLayer/>
                    </ScrollContentPresenter>
                    <ScrollBar/>
                    <ScrollBar/>
                </Grid>
            </ScrollViewer>
        </Border>
    </StackPanel>
</RibbonTextBox>

したがって、RibbonTextBox の幅を設定すると、実際にはテキスト ボックスの幅ではなく、コントロール全体の幅が設定されます。

私の提案は、RibbonTextBox から派生するクラスを作成し、このクラスに、投稿で示した例のように Loaded イベント ハンドラーを実装することです。ただし、画像、ラベル、境界線には追加のマージンとパディングがあり、テキスト ボックスの左側に余分なスペースができることに注意してください。

于 2010-04-08T20:30:21.340 に答える
-1

RibbonTextBoxの問題は、「Enter」キーを押してもKeyDownイベントとKeyUpイベントがトリガーされないことです。その結果、LostFocus()「Enter」キーを押してもイベントはトリガーされません。

于 2012-06-28T21:01:41.303 に答える