在C#代码中隐藏或删除wpf按钮的边框

时间:2013-03-27 17:14:46

标签: c# wpf c#-4.0 wpf-controls c#-3.0

我的xaml文件中有一个名为“mystack”的stackpanel,我在.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;

    }

5 个答案:

答案 0 :(得分:1)

我同意HighCore,您通常不希望操纵代码中的UI元素。

要删除Border按钮,您可以在Xaml中将Button的BorderThickness属性设置为“0”,或在代码隐藏中将new Thickness(0)设置为myButton.BorderThickness = new Thickness(0);

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

编辑:

好的,我注意到了你的更新问题。我会创建一个存储学校列表的属性,并以类似于此的方式绑定到它:

DataContext

在某处您需要将控件的Schools设置为包含<ItemsControl ItemsSource="{Binding Schools}"> <ItemsControl.ItemTemplate> <DataTemplate> <Button Content="{Binding}" BorderThickness="0" /> </DataTemplate> </ItemsControl.ItemTemplate> <ItemsControl> 属性的类。如果您要动态更新学校列表,则需要实施INotifyPropertyChanged,以便UI知道何时更新。然后你的Xaml看起来像这样:

{{1}}

答案 1 :(得分:0)

快速修复:

我必须做的才能有效地hide按钮边框 - 并且由于按钮控制模板,我相信哪个利用和更改按钮边框(即即使你删除它也会将它绘制在上面一些触发器我相信)......

...也是设置BorderBrush="Transparent"(我总是做BorderThickness但是我猜它不需要 - 仅用于视觉/布局look'n'feel)

即。单独设置thickness是不够的。

  

我真的不确定这是下注的方式,或者实际上我是   确定必须有更聪明的东西 - 但我总是最终得到   这一点。

正确的方式:

  

正确的方法 - 建议 - 是编写自己的Button模板 -   基于微软官方的一个 - 或base它 - 并做什么   你需要没有边界。

对于/ C#后面的代码:

  

根据你改变的问题,你真的不需要这样做 - 做别人建议的事情

答案 2 :(得分:0)

您无法删除按钮的边框,如:btn.BorderThicknes=new Thickness(0);

请参阅:Removing button's border

答案 3 :(得分:0)

最好的方法是:

<Style TargetType="Button">
    <Style.Resources>
        <Style TargetType="{x:Type Border}">
            <Setter Property="CornerRadius" Value="0"/>
        </Style>
    </Style.Resources>
</Style>

答案 4 :(得分:-1)

  

我真正想要的是用按钮填充这个堆栈面板   来自字符串列表

这叫做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模式。