首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

wpf custom control 不显示解决思路

2012-11-08 
wpf custom control 不显示各位老师好!我做了一个wpf的自定义控件(custom control)。Generic.xaml文件代码

wpf custom control 不显示
各位老师好!

  我做了一个wpf的自定义控件(custom control)。
Generic.xaml文件代码如下:

XML code
<ResourceDictionary    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:local="clr-namespace:FileSelectorControl">    <Style TargetType="{x:Type local:FileSelector}">        <Setter Property="Template">            <Setter.Value>                <ControlTemplate TargetType="{x:Type local:FileSelector}">                    <Border Background="{TemplateBinding Background}"                            BorderBrush="{TemplateBinding BorderBrush}"                            BorderThickness="{TemplateBinding BorderThickness}">                                                 <ScrollViewer  Name="scrolls" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">                                <ScrollViewer.Content>                                    <StackPanel Name= "multi_item" Orientation="Vertical" ScrollViewer.VerticalScrollBarVisibility="Auto">                                        <StackPanel Orientation="Horizontal" Height="30" Margin="0,5,0,0">                                            <Button Name="add_item" Content="增加" Margin="5,0,0,0" Width="80" ></Button>                                            <Button Name="del_item" Content="删除" Margin="5,0,0,0" Width="80"  />                                        </StackPanel>                                        <StackPanel Name="stack_static" Orientation="Horizontal" Height="30" Margin="0,5,0,0">                                            <TextBox Name="textBox_FileFullName"  Margin="5,0,5,0" Width="330"></TextBox>                                            <Label Content="名称"    Margin="5,0,5,0"></Label>                                            <TextBox Name="displayName" Margin="5,0,5,0" Width="200"></TextBox>                                                                                        <Button Name="button_browser"  Content="浏览"/>                                        </StackPanel>                                        <StackPanel Name="dynamic_item">                                        </StackPanel>                                    </StackPanel>                                </ScrollViewer.Content>                            </ScrollViewer>                                            </Border>                </ControlTemplate>            </Setter.Value>        </Setter>    </Style></ResourceDictionary>


类的代码如下FileSelector.cs
C# code
using System;using System.Linq;              //程序用到LINQ using System.Windows;           //TemplatePartAttributeusing System.Collections.Generic;using System.Windows.Controls;  //Controlusing System.Windows.Input;     //RoutedUICommandusing Microsoft.Win32;          //对话框OpenFileDialognamespace FileSelectorControl{    [TemplatePart(Name = "textBox_FileFullName", Type = typeof(TextBox))]    public class FileSelector : Control    {        static FileSelector()        {            DefaultStyleKeyProperty.OverrideMetadata(typeof(FileSelector), new FrameworkPropertyMetadata(typeof(FileSelector)));        }        public FileSelector():base()        {                  }               #region 控件模板                Button add_item;        Button del_item;        Button btn1;        StackPanel multi_item;        StackPanel dynamic_item;        TextBox tbx ;                public override void OnApplyTemplate()        {            base.OnApplyTemplate();            add_item = Template.FindName("add_item", this) as Button;            del_item = Template.FindName("del_item", this) as Button;            add_item.Click += new RoutedEventHandler(add_item_click);            del_item.Click += new RoutedEventHandler(del_item_click);            btn1 = Template.FindName("button_browser",this) as Button;            btn1.Click += new RoutedEventHandler(btn_click);            multi_item = Template.FindName("stackPanel_multiItem", this) as StackPanel;            dynamic_item = Template.FindName("stackPanel_dynamicItem", this) as StackPanel;                        tbx = Template.FindName("textBox_FileFullName", this) as TextBox;        }        #endregion        #region 对话框处理        public string PredefinedExts { get; set; }        string GetFilterString(out string first)        {            first = null;            var exts = PredefinedExts.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);            string head = string.Empty;            if (exts.Length != 0)            {                var trim = exts.Where(s => s.Trim() != String.Empty);                first = trim.FirstOrDefault();                head = String.Join("|", trim.Select(s => String.Format("{0}文件|*.{1}", s.ToUpper(), s.ToLower())));            }            if (head != String.Empty)                head += "|";            return head + "所有文件|*.*";        }        string OpenDialog()        {            var dlg = new OpenFileDialog();            string defExt;            dlg.Filter = GetFilterString(out defExt);            dlg.DefaultExt = defExt;            if (dlg.ShowDialog() == true)                return dlg.FileName;            return null;        }        #endregion                     void add_item_click(object sender, RoutedEventArgs e)        {            StackPanel panel = new StackPanel();            panel.Orientation = Orientation.Horizontal;            panel.Margin = new Thickness(0, 5, 0, 0);            TextBox tbx = new TextBox();            tbx.Width = 330;            tbx.Height = 30;            tbx.Margin = new Thickness(5, 0, 5, 0);            Button btn = new Button();                        btn.Content = "浏览";            btn.Click += new RoutedEventHandler(btn_click);                        panel.Children.Add(tbx);            panel.Children.Add(btn);            //multi_item.Children.Remove();            dynamic_item.Children.Add(panel);                    }        void del_item_click(object sender, RoutedEventArgs e)        {            int count = dynamic_item.Children.Count;            if(count>0){                dynamic_item.Children.RemoveAt(count-1);            }                    }        void btn_click(object sender,RoutedEventArgs e) {           string path =  OpenDialog();            Button btn = sender as Button;            StackPanel parent = btn.Parent as StackPanel;            foreach(var child in parent.Children){                if(child is TextBox){                    ((TextBox)child).Text = path;                }            }        }            }} 




工程编译完事之后,在toolbox能看到自定义控件的图标,但是当在其他的xaml文件中引用FileSelector的时候,不显示这个控件。

XML code
主窗体的xaml文件如下<Window x:Class="metadataTool.MainWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"                xmlns:my="clr-namespace:DevComponents.WpfEditors;assembly=DevComponents.WpfEditors"                  Background="Chocolate" Title="元数据录入系统" Height="706" Width="1095" xmlns:my1="clr-namespace:FileSelectorControl;assembly=FileSelectorControl" xmlns:my2="clr-namespace:FileSelectorControl.Themes;assembly=FileSelectorControl">    <Grid Width="1009" Height="675">                <Menu Height="25" HorizontalAlignment="Left" Name="menu" VerticalAlignment="Top" Width="881" Margin="4,4,0,0">            <MenuItem Header="文件" Name="file" Margin="20,0,20,0">                <MenuItem Header="退出" Name="exit"></MenuItem>            </MenuItem>                                    <MenuItem Header="操作" Name="view" Margin="0,0,20,0"></MenuItem>                        <MenuItem Header="帮助" Name="help" Margin="0,0,20,0"></MenuItem>        </Menu>        <my1:FileSelector Name="fileSelector1" Width="200" Height="300"/>        <StackPanel Name="inputArea" Margin="0,30,2,12" Background="Green">                    </StackPanel>    </Grid>    </Window>


系统运行加载这个窗体,自定义控件FileSeletor不显示。这是问什么呢?


[解决办法]
实际上 就是需要给你的
<local:FileSelector Style="{StaticResource sssss}" x:Name="fileSelector1" Width="200" Height="300"/>
给个style 这个style在哪里定义 随便你 只要能取到 不报错应该就ok了吧

热点排行