从SQL Server读取XAML到WPF C# [英] Read xaml from sql server to 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屋!