ただし、フェイシャルコースのラジオボタンの弾揃えトップ?

StackOverflow https://stackoverflow.com/questions/533753

  •  22-08-2019
  •  | 
  •  

質問

している複数行のラジオボタンいたいの弾きの左側のコンテンツ(デフォルト)にはラジオボタン。何のための最も簡単な方法はないことォ?

役に立ちましたか?

解決

注意:チェックしてみてください レイチェルの応答 -彼女は、このステージはさらに汎用のテンプレート


まずな時間 VerticalAlignment または VerticalContentAlignment (あるいは ControlTemplate).いしないしたいものでなされるものであります。

に記載の通り MSDN a BulletDecorator (制御するチェックボックスとラジオボタンの使用を描画するためにラジオ/チェックボタン)を定位置にアイコンの動します。またの追加を制御す:

弾い合わせの最初の行のテキストの子 オブジェクトのテキストオブジェクトです。場合にはオブジェクトがないテキストオブジェクトの 弾揃えの中央に子オブジェクトです。

ない限り、変更の管理テンプレートは不要です)することができる位置は、ラジオ/チェックアイコンの上により内容物が目に入った場合にはがします。

だいこういう良い知らせに移動することができるアイコンをどんなに多くの VerticalAlignment 物件てみます。

<RadioButton>
    <StackPanel>
        <TextBlock Text="First line"/>
        <TextBlock Text="Something else"/>
    </StackPanel>
</RadioButton>

幸いなことにきくする TextBlock を使用 InlineUIContainer.テキスト(またはコンテンツの最初の行轄の位置にアイコンを自動的にだいたいものの下には、最初の行う機会を設けていきたいと思いテキストで利用 <Linebreak/> その <InlineUIContainer/>

以下に例を示しますが、特大 TextBox をより明確に何が起きています。

<RadioButton>

    <TextBlock VerticalAlignment="Top" TextWrapping="Wrap">

        <TextBlock Text="Products with &lt;" VerticalAlignment="Center" Margin="0,0,5,0"/>

        <InlineUIContainer BaselineAlignment="Center">
            <TextBox FontSize="30" Width="25" Text="10" Margin="0,0,5,0"/>          
        </InlineUIContainer>

        <TextBlock VerticalAlignment="Center" Margin="0,0,5,0">
            <Run Text="days" FontWeight="Bold"/>
            <Run Text="inventory" />
        </TextBlock>

        <LineBreak/>    

        <InlineUIContainer>
            <StackPanel>
                <CheckBox Content="Include unsold products" />
                <CheckBox Content="Include something else" />
            </StackPanel>
        </InlineUIContainer>

    </TextBlock>
</RadioButton>

他のヒント

私は内蔵の比較的汎用のテンプレートに基づく サイモン-ウィの回答 利用できるほとんどの状況ないカスタマイズ RadioButton.Content ます。

<ControlTemplate x:Key="MultiLineRadioButtonTemplate" TargetType="{x:Type RadioButton}">
    <RadioButton IsChecked="{TemplateBinding IsChecked}">
        <TextBlock>
            <LineBreak />
            <InlineUIContainer>
                <ContentPresenter Margin="0,-21,0,8" 
                                  Content="{TemplateBinding ContentPresenter.Content}"
                                  ContentTemplate="{TemplateBinding ContentPresenter.ContentTemplate}"/>
            </InlineUIContainer>
        </TextBlock>
    </RadioButton>
</ControlTemplate>

説明どのようにテンプレート作品

  • TextBlock があるのでデフォルトでは、ラジオボタンを弾合わせの最初の行がある場合、テキストのコンテンツであるテキストオブジェクト( Label 動作しません)

  • LineBreak で包み込むコンテンツの新しいパスワードを入力の最初のラインが作成され

  • InlineUIContainer はいできる非テキストのコンテンツ TextBlock

  • ContentPresenter では、実際のコンテンツでは負のトップマージンのスペースが残し LineBreak オブジェクトです。

こちらは一部の例コンテンツ:

<StackPanel>
    <RadioButton Template="{StaticResource MultiLineRadioButtonTemplate}">
        <StackPanel>
            <Label Content="Option 1" />
            <StackPanel>
                <CheckBox Content="Some setting" />
                <CheckBox Content="Some other setting" />
            </StackPanel>
        </StackPanel>
    </RadioButton>

    <RadioButton Template="{StaticResource MultiLineRadioButtonTemplate}">
        <StackPanel>
            <Label Content="Option 2" />
            <DataGrid AutoGenerateColumns="False" Height="100">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Id" />
                    <DataGridTextColumn Header="Date" />
                    <DataGridTextColumn Header="Total" />
                    <DataGridTextColumn Header="Count" />
                </DataGrid.Columns>
            </DataGrid>
        </StackPanel>
    </RadioButton>


    <RadioButton Template="{StaticResource MultiLineRadioButtonTemplate}">
        <StackPanel>
            <Label Content="Option 3" />
            <TextBlock TextWrapping="WrapWithOverflow" Margin="2">
                Lorem ipsum dolor sit amet, consectetur adipisicing elit, 
                sed do eiusmod tempor incididunt ut labore et dolore magna 
                aliqua. Ut enim ad minim veniam, quis nostrud exercitation 
                ullamco laboris nisi ut aliquip ex ea commodo consequat. 
                Duis aute irure dolor in reprehenderit in voluptate velit 
                esse cillum dolore eu fugiat nulla pariatur. Excepteur sint 
                occaecat cupidatat non proident, sunt in culpa qui officia 
                deserunt mollit anim id est laborum.
            </TextBlock>
        </StackPanel>
    </RadioButton>
</StackPanel>

どのように見え:

enter image description here

みんな嬉しいのがマイナスのトップマージンの ContentPresenter ているハードコードがうまくいかない場合も変更文字サイズは、手動で調整する。

なかったと思いるハードをコンバーターの Margin 物件と計算の高さに改行({TemplateBinding FontSize}?), もの拡張バージョンをラジオボタンを制御してこの動作をデフォルトでは、まずは今のハード-コーディング-21に基づくアプリのデフォルトのフォントサイズです。

ものするために追加 TemplateBindingsRadioButton のテンプレートを継承する場合その他の物からの RadioButton, などのマージン、パディング、アライメント、など。まず IsChecked 目的で保たれています。

RadioButtonのためControl.Templateをオーバーライドします。ここでMSDN ラジオボタンコントロールテンプレートの例からの例

あなたはラジオボタンのControl.Templateを上書きしたくない場合は、コンテンツのラップのTextBlockすることができます。このサンプルを参照してください。

<RadioButton  Name="radioButton1">
    <TextBlock TextWrapping="Wrap">Here is some multiline text that does some wrapping</TextBlock>
</RadioButton>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top