从SQL Server读取XAML到WPF C# [英] Read xaml from sql server to WPF C#

查看:143
本文介绍了从SQL Server读取XAML到WPF C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的第一个问题,对不起!

好吧,我在SQL中有一个存储过程,那就是返回了XAML,如下所示:

Hi, this it''s my first question here so I''m sorry anything!

Well, I have a Store Procedure in SQL thats returns a XAML, like this:

<Grid Margin="20">
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="auto" />
    <!--Coluna Labels 0-->
    <ColumnDefinition Width="auto" />
    <!--Coluna p/ Splitter 1-->
    <ColumnDefinition />
    <!--Coluna Campos 2-->
  </Grid.ColumnDefinitions>
  <Grid.RowDefinitions>
    <RowDefinition />
    <RowDefinition Height="auto" />
    <RowDefinition Height="auto" />
    <RowDefinition Height="auto" />
    <RowDefinition Height="auto" />
    <RowDefinition Height="auto" />
  </Grid.RowDefinitions>
  <GridSplitter Grid.Row="1" Grid.RowSpan="6" Grid.Column="1" Width="2" removed="Black" ResizeBehavior="CurrentAndNext" ResizeDirection="Columns" />
  <TextBlock Grid.Row="1" Grid.Column="0" Margin="5" Text="Código:" />
  <StackPanel Grid.Row="1" Grid.Column="2" Orientation="Horizontal" Height="auto">
    <TextBox Margin="5" Name="txtCodigoBebida" Text="{Binding CodigoBebida, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource BoxStyle}" />
    <Button Name="btnExiste" Click="btnExiste_Click" Content="Procurar" Margin="5" Height="30" Width="auto" />
  </StackPanel>
  <TextBlock Grid.Row="2" Grid.Column="0" Margin="5" Text="Nome:" />
  <TextBox Grid.Row="2" Grid.Column="2" Margin="5" Name="txtNome_Bebida" Text="{Binding Nome, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource BoxStyle}" />
  <TextBlock Grid.Row="3" Grid.Column="0" Margin="5" Text="Nº Unidades:" />
  <TextBox Grid.Row="3" Grid.Column="2" Margin="5" Name="txtNumeroUnidades" Text="{Binding NumeroUnidades, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource BoxStyle}" />
  <CheckBox Grid.Row="4" Grid.Column="2" Margin="5" Name="chkVasilhame" Content="Vasilhame" IsChecked="{Binding Vasilhame, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
    <CheckBox.ToolTip>
      <Border BorderThickness="4" CornerRadius="15" Padding="2 2 2 15" removed="Green">
        <StackPanel Orientation="Vertical" Margin="2">
          <Image Source="vasilhame.jpg" />
        </StackPanel>
      </Border>
    </CheckBox.ToolTip>
  </CheckBox>
  <Menu Grid.ColumnSpan="3" Grid.Row="0" Height="25">
    <MenuItem Header="Menu">
      <MenuItem Name="MenuNovo" Header="_Novo" Click="MenuNovo_Click" />
      <MenuItem Name="MenuGravar" Header="_Gravar" Click="MenuGravar_Click" />
      <Separator />
      <MenuItem Name="MenuEliminar" Header="_Eliminar" Click="MenuEliminar_Click" />
      <Separator />
      <MenuItem Name="MenuSair" Header="_Sair" Click="MenuSair_Click" />
    </MenuItem>
  </Menu>
</Grid>



现在的问题是在WPF中读取的.我尝试这个:



The problem now is read that in WPF. I try this:

SqlConnection con = new SqlConnection();
con.ConnectionString = Properties.Settings.Default.Ligacao;
con.Open();

SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "ObterBebidaXAML";      
             
XmlReader myxml = cmd.ExecuteXmlReader();
myxml.Read();

Grid grdToLoad = new Grid();
grdToLoad.Height = 210;
grdToLoad.Width = 400;

grdToLoad = System.Windows.Markup.XamlReader.Load(myxml) as Grid;
content2.Children.Add(grdToLoad);



但是我得到了一个跟随错误:



But i got a follow error:

'' XML namespace prefix does not map to a namespace URI, so cannot resolve property 'Margin'. Line '0' Position '0'.



我认为问题在于我将myxml声明为XmlRead而不是Xaml,但是我无法弄清楚XamlRead可以执行相同的操作.

对不起,英语不好,我希望你理解我的意思.

[edit] SHOUTING已删除-OriginalGriff [/edit]



I think the problem is that I declare myxml as XmlRead instead Xaml, but I cannot figure out a XamlRead to do the same thing.

Sorry for bad english, and I hope that you undertood what I mean.

[edit]SHOUTING removed - OriginalGriff[/edit]

推荐答案

您好,

我只是找到解决方法.

Hi there,

I just find a solution.

CREATE PROCEDURE [dbo].[GETXAML]

AS

BEGIN

	Declare @MyForm xml

	SELECT @MyForm='<grid name="MainGrid" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
		
		<border padding="10,10,10,10" cornerradius="0,0,0,0" margin="5,5,5,5">
			<border.background>
				<lineargradientbrush startpoint="0.5,0" endpoint="0.5,1">
					<lineargradientbrush.gradientstops>
						<gradientstop color="#03000400" offset="0.1" />
						<gradientstop color="#FF0000FF" offset="0.9" />
					</lineargradientbrush.gradientstops>
				</lineargradientbrush>
			</border.background>
			
			<grid margin="20,20,20,20">
				<grid.columndefinitions>
					<columndefinition width="Auto" />
					<columndefinition width="Auto" />
				</grid.columndefinitions>
				<grid.rowdefinitions>
					<rowdefinition height="Auto" />
					<rowdefinition height="Auto" />
				</grid.rowdefinitions>
				
				<textblock text="Código:" margin="5,5,5,5" grid.column="0" grid.row="0" />
				<textbox margin="5,5,5,5" grid.column="1" grid.row="0" width="100"> 1</textbox>
				<textblock text="Nome:" margin="5,5,5,5" grid.column="0" grid.row="1" />
				<textbox margin="5,5,5,5" grid.column="1" grid.row="1" width="100"> Fábio</textbox>
			</grid>
		</border>
	</grid>'
	
	
select @MyForm

	
	
END





private void MainGarlandWindow_Loaded(object sender, RoutedEventArgs e)
        {
            //Criar XML
            Grid MyGrid = MainGrid;
            //string savedgrid = XamlWriter.Save(MyGrid);

            SqlConnection con = new SqlConnection();
            con.ConnectionString = Properties.Settings.Default.Ligacao;
            con.Open();

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "GETXAML";

            String MyXml = cmd.ExecuteScalar().ToString();

            StringReader stringReader = new StringReader(MyXml);
            XmlReader xmlReader = XmlReader.Create(stringReader);
            Grid readerLoad = (Grid)XamlReader.Load(xmlReader);
            MainGrid.Children.Add(readerLoad);
        }



Ty:)



Ty :)


这篇关于从SQL Server读取XAML到WPF C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆