1

xaml ファイルに「mystack」という名前のスタックパネルがあり、.cs ファイルから動的にボタンを追加し、C# .cs ファイルのボタンの境界線を削除したい

私が本当に欲しいのは、このスタックパネルに文字列のリストからのボタンを入力することです。事前に感謝します

xaml:

    <Grid HorizontalAlignment="Left" Height="227" Margin="10,10,0,0" Grid.Row="2"    
        VerticalAlignment="Top" Width="530">
        <ScrollViewer VerticalScrollBarVisibility="Auto">
            <StackPanel Name="mystack" HorizontalAlignment="Left" Grid.Row="2" 
                       VerticalAlignment="Top" Width="520"/>
        </ScrollViewer>
    </Grid>

.cs:

     public List<String> Schools()
    {

        List<String> l = new List<string>();
        l.Add("SST");
        l.Add("SBE");
        l.Add("SSH");

        return l;

    }
4

5 に答える 5

1

HighCore に同意します。通常、コード内の UI 要素を操作したくないでしょう。

ボタンを削除するBorderには、ボタンのBorderThicknessプロパティを Xaml で "0" に設定するかnew Thickness(0)、コード ビハインドで設定します。

すなわち

myButton.BorderThickness = new Thickness(0);

編集:

さて、私はあなたの更新された質問に気づきました。学校のリストを格納するプロパティを作成し、次のような方法でバインドします。

public List<string> Schools 
{ 
    get { return _schools; }
    set { _schools = value; } 
}

DataContextコントロールの をプロパティを含むクラスに設定する必要がありSchoolsます。Schools のリストを動的に更新する場合は、INotifyPropertyChangedを実装して、UI がいつ更新するかを認識できるようにする必要があります。Xaml は次のようになります。

<ItemsControl ItemsSource="{Binding Schools}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
             <Button Content="{Binding}" BorderThickness="0" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
<ItemsControl>
于 2013-03-27T17:22:21.800 に答える
0

迅速な修正:

ボタンの境界線を効果的にするために私がしなければならなかったことhide-そしてボタンコントロールテンプレートのために、ボタンの境界線を利用して変更すると信じています(つまり、それを削除しても、何らかのトリガーで描画されると思います)...

...BorderBrush="Transparent"同様に設定する必要がありました(私はいつもそうしBorderThicknessていますが、それは必要ないと思います-ビジュアル/レイアウトのルックアンドフィールのためだけです)

つまり、設定thicknessだけでは不十分です。

それが賭けの方法なのか、実際にはもっと賢い方法があるに違いないと確信していますが、私はいつもそれで終わります。

正しい方法:

適切な方法 (および推奨) は、独自のボタン テンプレートを作成することです (Microsoft の公式のものに基づいて、またはbaseそれに基づいて)、境界線なしで必要なことを行います。

コード ビハインド/C# の場合:

変更された質問によると、それは本当に必要ありません-他の人がすでに提案したことをしてください

于 2013-03-27T17:30:34.033 に答える
0

次のようなボタンの境界線を削除することはできません。btn.BorderThicknes=new Thickness(0);

これを参照してください:ボタンの境界線を削除する

于 2013-03-27T17:33:04.177 に答える
0

これを行う最良の方法は次のとおりです。

<Style TargetType="Button">
    <Style.Resources>
        <Style TargetType="{x:Type Border}">
            <Setter Property="CornerRadius" Value="0"/>
        </Style>
    </Style.Resources>
</Style>
于 2015-08-08T09:59:03.333 に答える
-1

私が本当に欲しいのは、このスタックパネルに文字列のリストからのボタンを入力することです

それは a と呼ばれますListBox:

<ListBox ItemsSource="{Binding Items}">
    <ListBox.ItemTemplate>
        <DataTemplate>
           <Button Content="{Binding}" BorderThickness="0"/>
                   <!-- Whatever other customizations to the button -->
        </DataTemplate
    </ListBox.ItemTemplate>
</ListBox>

ビューモデル:

public class ViewModel
{
    public ObservableCollection<string> Items {get;set;}

    public ViewModel()
    {
        Items = new ObservablecCollection<string>();
        Items.Add("String1");
        Items.Add("String2");
        Items.Add("String3");
    }
}

MVVM パターンを学習する必要があります。

于 2013-03-27T17:28:05.013 に答える