Multidimensional databinding? How to? - c#
Im trying to create a set of grids and add them to a scrollview.
Here is what it should look like:
http://tinypic.com/r/256gpxf/7
The "depatures" showing up under "other stop" should be dynamic. I know how to create the titles ("other stop") using databinding but i need to get the depatures for each stop. It's like a databinding in a databinding of some kind.
It's hard to explain but if you look at the screenshot i think you guys can figure out what i mean :)
EDIT:
The class for busstops:
public class BusStop
{
public string Name { get; private set; }
public string ID { get; private set; }
public List<Depature> Depatures { get; private set; }
public BusStop(string name, string id)
{
Name = name;
ID = id;
Depatures = new List<Depature>();
}
}
Depature class:
public class Depature
{
public string Destination { get; private set; }
public int Next { get; private set; }
public int NextNext { get; private set; }
public Depature(string destination, int next, int nextNext)
{
Destination = destination;
Next = next;
NextNext = nextNext;
}
}
Each stop has a diffrent set of depatures attached to it. That's what im trying to populate in a grid. One grid for each stop. Here is "static" sample xaml for a stop with 4 depatures:
<Grid Margin="0,0,0,12">
<Grid.RowDefinitions>
<RowDefinition Height="42" />
<RowDefinition Height="28" />
<RowDefinition Height="28" />
<RowDefinition Height="28" />
<RowDefinition Height="28" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="38" />
<ColumnDefinition Width="280" />
<ColumnDefinition Width="46" />
<ColumnDefinition Width="46" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.ColumnSpan="2" Grid.Column="0" FontSize="32" Text="Other Stop" Foreground="#FFE37306" />
<TextBlock VerticalAlignment="Bottom" Grid.Row="0" Grid.Column="2" FontSize="12" Text="avgår"/>
<TextBlock VerticalAlignment="Bottom" Grid.Row="0" Grid.Column="3" FontSize="12" Text="nästa"/>
<Grid Grid.Row="1" Style="{StaticResource VasttrafikGridLine}" Background="#0D4774">
<TextBlock Style="{StaticResource VasttrafikTextLine}" Text="80" />
</Grid>
<TextBlock Margin="6,0,12,0" Grid.Row="1" Grid.Column="1" Text="Nils Eriksson Term" />
<TextBlock HorizontalAlignment="Left" Grid.Row="1" Grid.Column="2" Width="20" Text="5" />
<TextBlock HorizontalAlignment="Left" Grid.Row="1" Grid.Column="3" Width="20" Text="15" />
<Grid Grid.Row="2" Style="{StaticResource VasttrafikGridLine}" Background="#0D4774">
<TextBlock Style="{StaticResource VasttrafikTextLine}" Text="80" />
</Grid>
<TextBlock Margin="6,0,12,0" Grid.Row="2" Grid.Column="1" Text="Nils Eriksson Term" />
<TextBlock HorizontalAlignment="Left" Grid.Row="2" Grid.Column="2" Width="20" Text="5" />
<TextBlock HorizontalAlignment="Left" Grid.Row="2" Grid.Column="3" Width="20" Text="15" />
<Grid Grid.Row="3" Style="{StaticResource VasttrafikGridLine}" Background="#0D4774">
<TextBlock Style="{StaticResource VasttrafikTextLine}" Text="80" />
</Grid>
<TextBlock Margin="6,0,12,0" Grid.Row="3" Grid.Column="1" Text="Nils Eriksson Term" />
<TextBlock HorizontalAlignment="Left" Grid.Row="3" Grid.Column="2" Width="20" Text="5" />
<TextBlock HorizontalAlignment="Left" Grid.Row="3" Grid.Column="3" Width="20" Text="15" />
<Grid Grid.Row="4" Style="{StaticResource VasttrafikGridLine}" Background="#0D4774">
<TextBlock Style="{StaticResource VasttrafikTextLine}" Text="80" />
</Grid>
<TextBlock Margin="6,0,12,0" Grid.Row="4" Grid.Column="1" Text="Nils Eriksson Term" />
<TextBlock HorizontalAlignment="Left" Grid.Row="4" Grid.Column="2" Width="20" Text="5" />
<TextBlock HorizontalAlignment="Left" Grid.Row="4" Grid.Column="3" Width="20" Text="15" />
</Grid>
Is using a grid even a good idea? It seems like i have to define each row with rowdefinitions etc.
Thanks in advance!
/R
Edit: Now that you posted your code i adjusted the template. You misspelled "Departures" by the way, it's missing an "r".
Sample data i use:
List<BusStop> data = new List<BusStop>();
BusStop busStop1 = new BusStop("Some Stop", "123");
busStop1.Depatures.Add(new Depature("Nils Eriksson Term", 5, 15));
busStop1.Depatures.Add(new Depature("Nils Eriksson Term", 5, 15));
busStop1.Depatures.Add(new Depature("Nils Eriksson Term", 5, 15));
busStop1.Depatures.Add(new Depature("Nils Eriksson Term", 5, 15));
BusStop busStop2 = new BusStop("Other Stop", "42");
busStop2.Depatures.Add(new Depature("Nils Eriksson Term", 5, 15));
busStop2.Depatures.Add(new Depature("Nils Eriksson Term", 5, 15));
busStop2.Depatures.Add(new Depature("Nils Eriksson Term", 5, 15));
busStop2.Depatures.Add(new Depature("Nils Eriksson Term", 5, 15));
BusStop busStop3 = new BusStop("Not A Stop", "0");
busStop3.Depatures.Add(new Depature("Void", 5, 15));
busStop3.Depatures.Add(new Depature("Void", 5, 15));
busStop3.Depatures.Add(new Depature("Void", 5, 15));
busStop3.Depatures.Add(new Depature("Void", 5, 15));
data.Add(busStop1);
data.Add(busStop2);
data.Add(busStop3);
Data = data;
The general approach should be to define nested DataTemplates, here i use a ItemsControl whose ItemTemplate contains headers and another ItemsControl:
<ItemsControl ItemsSource="{Binding Data}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="38" />
<ColumnDefinition Width="280" />
<ColumnDefinition Width="46" />
<ColumnDefinition Width="46" />
</Grid.ColumnDefinitions>
<Grid.Children>
<TextBlock Grid.Column="0" Grid.ColumnSpan="2" Text="{Binding Name}" FontSize="32" Foreground="#FFE37306"/>
<TextBlock Grid.Column="2" VerticalAlignment="Bottom" FontSize="12" Text="avgår"/>
<TextBlock Grid.Column="3" VerticalAlignment="Bottom" FontSize="12" Text="nästa"/>
</Grid.Children>
</Grid>
<ItemsControl ItemsSource="{Binding Depatures}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="38" />
<ColumnDefinition Width="280" />
<ColumnDefinition Width="46" />
<ColumnDefinition Width="46" />
</Grid.ColumnDefinitions>
<Grid.Children>
<Grid Grid.Column="0" Style="{StaticResource VasttrafikGridLine}" Background="#0D4774">
<TextBlock Grid.Column="0" Text="80" Style="{StaticResource VasttrafikTextLine}"/>
</Grid>
<TextBlock Grid.Column="1" Text="{Binding Destination}" Foreground="DarkBlue"/>
<TextBlock Grid.Column="2" Text="{Binding Next}" HorizontalAlignment="Left" Width="20" Foreground="DarkBlue"/>
<TextBlock Grid.Column="3" Text="{Binding NextNext}" HorizontalAlignment="Left" Width="20" Foreground="DarkBlue"/>
</Grid.Children>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Looks something like this (it's lacking your specific styles and overrides of course):
You still did not specify where your three different blocks come from etc. but anything beyond this is definitely your problem...
Related
Bind Combobox in WPF to Entity class
I have a data input form where i have textboxes,comboboxes and datepickers. I want to Bind comboboxes to the DB column so that users select the correct value for insertion. I have attached the viewmodel class and XAML code. In the viewmodel code "private void GetSW()" - this gets all the list of the entity class and "private void addSW()" this adds the record to the DB, Except the combobox binding everything works fine. in XAML i have binded combobox like this but this give blank combobox, please help what i am missing. I researched many topics on this forum but didn't find any solution <ComboBox x:Name="PSW" Grid.Column="3" Grid.Row="2" ItemsSource="{Binding newSW.PreviousSW}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="20"/> Its a ViewModel Code using BusinessEntities; using GalaSoft.MvvmLight; using GalaSoft.MvvmLight.Command; using MUDB.Services; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; using System.Windows; namespace MUDB.Ui.Logic { public class SoftwareVersionListViewModel:ViewModelBase { private bool enableRowDetails=false; public bool EnagleRowDetails { get { return enableRowDetails; } set { enableRowDetails = value; RaisePropertyChanged(); } } public SoftwareVersionListViewModel() { SaveSW = new RelayCommand(addSW); //savecommand = new RelayCommand(addprod); GetSW(); newSW = new SoftwareDefEntity(); EditSW = new RelayCommand(() => { EnagleRowDetails = true; MessageBox.Show("Edit button clicked!!");}); //SWList = new SoftwareDefEntity(); //Initializing the object of the Entity class } public List<SoftwareDefEntity> SWentities { get; set; } private SoftwareDefEntity _selectedsw; public SoftwareDefEntity Selectedsw { get { return _selectedsw; } set { _selectedsw = value; //This will get all the values of that particular Selected row that are defined in the entity class EnagleRowDetails = false; //Reset boolean value EnagleRowDetails, so that the selected rowdetails are disabled until Edit button is not clicked. //ShowView(); } } public RelayCommand SaveSW { get; private set; } public RelayCommand EditSW { get; private set; } public SoftwareDefEntity newSW { get; private set; } private void ShowView() { //cUSTOM METHODS } private void GetSW() // Method that reads the data from the service layer { SWDefService obj = new SWDefService(); SWentities = obj.getSW() ; //getSW is the method refered in Service layer } private void addSW() { SWDefService obj = new SWDefService(); obj.addSW(newSW); //newproduct object will hold the value of the binded control, in XAML its binded like this "{Binding newproduct.ProductName(ProductName is the field name in the entityclass/DB table)}" newSW = new SoftwareDefEntity(); } } } This is the XAML Code <UserControl x:Class="MUDB.Ui.CreateSW" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:MUDB.Ui" xmlns:converter="clr-namespace:MUDB.Ui.Logic.Converters;assembly=MUDB.Ui.Logic" xmlns:enums="clr-namespace:MUDB.Ui.Logic.Enums;assembly=MUDB.Ui.Logic" mc:Ignorable="d" Height="Auto" Width="Auto" DataContext="{Binding SoftwareVersionList,Source={StaticResource Locator}}" > <UserControl.Resources> <converter:RadioButtonToBooleanConverter x:Key="RadioButtonToBooleanConverter" /> </UserControl.Resources> <Grid> <Border Background="#90000000" Visibility="{Binding Visibility}"> <Border BorderBrush="Black" BorderThickness="1" Background="White" CornerRadius="10,0,10,0" VerticalAlignment="Center" HorizontalAlignment="Center"> <Border.BitmapEffect> <DropShadowBitmapEffect Color="Black" Opacity="0.5" Direction="270" ShadowDepth="0.7" /> </Border.BitmapEffect> <Grid Margin="10"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="200"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="40"/> <RowDefinition Height="25"/> <RowDefinition Height="30"/> <RowDefinition Height="25"/> <RowDefinition Height="30"/> <RowDefinition Height="25"/> <RowDefinition Height="30"/> <RowDefinition Height="100"/> <RowDefinition Height="40"/> <RowDefinition Height="40"/> <RowDefinition Height="40"/> </Grid.RowDefinitions> <Label Content="Create New Software Version" Grid.Column="0" Grid.Row="0" Foreground="White" Background="black" HorizontalAlignment="Stretch" VerticalAlignment="Center" Grid.ColumnSpan="3" /> <Label Content="ECU" Grid.Column="0" Grid.Row="1" Foreground="Black" HorizontalAlignment="Left" VerticalAlignment="Bottom" /> <Label Content="Software Name" Grid.Column="1" Grid.Row="1" Foreground="Black" HorizontalAlignment="Left" VerticalAlignment="Bottom" /> <Label Content="Previous Software" Grid.Column="2" Grid.Row="1" Foreground="Black" HorizontalAlignment="Left" VerticalAlignment="Bottom" /> <Label Content="Request Freeze Date" Grid.Column="0" Grid.Row="3" Foreground="Black" HorizontalAlignment="Left" VerticalAlignment="Bottom" /> <Label Content="Request Freeze Status" Grid.Column="1" Grid.Row="3" Foreground="Black" HorizontalAlignment="Left" VerticalAlignment="Bottom" /> <Label Content="Software Freeze Date" Grid.Column="0" Grid.Row="5" Foreground="Black" HorizontalAlignment="Left" VerticalAlignment="Center" /> <Label Content="Software Freeze Status" Grid.Column="1" Grid.Row="5" Foreground="Black" HorizontalAlignment="Left" VerticalAlignment="Center" /> <Label Content="Comments" Grid.Column="0" Grid.Row="7" Foreground="Black" HorizontalAlignment="Left" VerticalAlignment="Center" /> <ComboBox x:Name="ECU" Grid.Column="0" Grid.Row="2" Text="{Binding newSW.ECU}" Margin="10 0 0 0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="Auto"> <ComboBoxItem Name="cbi1">ACM</ComboBoxItem> <ComboBoxItem Name="cbi2">MCM</ComboBoxItem> </ComboBox> <TextBox x:Name="SW" Grid.Column="1" Grid.Row="2" Text="{Binding newSW.SoftwareName}" HorizontalAlignment="Left" VerticalAlignment="Top" Height="Auto" Width="150" /> <ComboBox x:Name="PSW" Grid.Column="3" Grid.Row="2" ItemsSource="{Binding PreviousSW}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="20"/> <DatePicker Grid.Column="0" Grid.Row="4" Margin="10 0 0 0" HorizontalAlignment="Left" VerticalAlignment="top" SelectedDate="{Binding newSW.Req_Freeze_Date}" Height="Auto" Width="Auto"/> <DatePicker Grid.Column="0" Grid.Row="6" Margin="10 0 0 0" HorizontalAlignment="Left" VerticalAlignment="top" SelectedDate="{Binding newSW.SW_Freeze_Date}" Height="Auto" Width="Auto"/> <RadioButton Content="Yes" GroupName="ReQstat" IsChecked="{Binding newSW.Req_Freeze_Status, Mode=OneWayToSource, Converter={StaticResource RadioButtonToBooleanConverter}, ConverterParameter={x:Static enums:RadioSelectionEnum.Yes}}" Style="{StaticResource AccentRadioButton}" Grid.Column="1" Grid.Row="4" HorizontalAlignment="Left" VerticalAlignment="Top" Height="14" Width="Auto"/> <RadioButton Content="No" GroupName="ReQstat" IsChecked="{Binding newSW.Req_Freeze_Status, Mode=OneWayToSource, Converter={StaticResource RadioButtonToBooleanConverter}, ConverterParameter={x:Static enums:RadioSelectionEnum.No}}" Style="{StaticResource AccentRadioButton}" Grid.Column="1" Grid.Row="4" Margin="60 0 0 0" HorizontalAlignment="Left" VerticalAlignment="Top" Height="Auto" Width="Auto"/> <RadioButton Content="Yes" GroupName="SWstat" IsChecked="{Binding newSW.SW_Freeze_Status, Mode=OneWayToSource, Converter={StaticResource RadioButtonToBooleanConverter}, ConverterParameter={x:Static enums:RadioSelectionEnum.Yes}}" Style="{StaticResource AccentRadioButton}" Grid.Column="1" Grid.Row="6" HorizontalAlignment="Left" VerticalAlignment="Top" Height="Auto" Width="Auto"/> <RadioButton Content="No" GroupName="SWstat" IsChecked="{Binding newSW.SW_Freeze_Status, Mode=OneWayToSource, Converter={StaticResource RadioButtonToBooleanConverter}, ConverterParameter={x:Static enums:RadioSelectionEnum.No}}" Style="{StaticResource AccentRadioButton}" Grid.Column="1" Grid.Row="6" Margin="60 0 0 0" HorizontalAlignment="Left" VerticalAlignment="Top" Height="Auto" Width="Auto"/> <TextBox x:Name="CommenttextBox" Grid.Column="1" Grid.Row="7" HorizontalAlignment="Left" Height="69" TextWrapping="WrapWithOverflow" VerticalAlignment="Center" Text="{Binding Comment}" Width="170" Margin="4.4,2.2,0,0" /> <UniformGrid Grid.Row="9" Margin="2" Columns="2" HorizontalAlignment="Stretch" VerticalAlignment="Center" Height="Auto"> <Button x:Name="SaveButton" Command="{Binding SaveSW}" Content="Save" Height="27" /> <Button x:Name="CloseButton" Click="CloseButton_Click" Content="Close" Height="26" /> </UniformGrid> </Grid> </Border> </Border> </Grid> </UserControl>
I guess you want to display the list of SoftwareDefEntity objects in your ComboBox. Bind to the SWentities property then: <ComboBox x:Name="PSW" Grid.Column="3" Grid.Row="2" ItemsSource="{Binding SWentities}" DisplayMemberPath="Name" ... /> And raise the PropertyChanged event in its setter of this property: private List<SoftwareDefEntity> _swEntities; public List<SoftwareDefEntity> SWentities { get { return _swEntities; } set { _swEntities = value; RaisePropertyChanged(); } }
This is the code to bind the data to combobox. i did not add any of other controls since those are working fine at your place. Observable collection is easy way to bind combobox . Here is your View Model.. public class SoftwareVersionListViewModel : ViewModelBase { public SoftwareVersionListViewModel() { GetSW(); } //Define the observable collection private ObservableCollection<SoftwareDefEntity> _SWmappings2 = new ObservableCollection<SoftwareDefEntity>(); //here is your Entity list public List<SoftwareDefEntity> SWentities { get; set; } // Obeservable collection property for access public ObservableCollection<SoftwareDefEntity> SWmappings2 { get { return _SWmappings2; } set { _SWmappings2 = value; OnPropertyChanged("appeventmappings2"); } } /// <summary> /// load the combobox /// </summary> private void GetSW() // Method that reads the data from the service layer { SWDefService obj = new SWDefService(); SWentities = obj.getSW(); //getSW is the method refered in Service layer SWentities.ForEach(_SWmappings2.Add); } } and Xaml... <ComboBox x:Name="ComboBox" ItemsSource="{Binding SWmappings2, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="PreviousSW" SelectedItem="{Binding PreviousSW, Mode=TwoWay}" Grid.Row="0" > </ComboBox>
screen coordinates to sharpdx device context coordinates
I am new to the sharpdx. My current work flow is user can capture a pictures using webcam or any cam devices.now i am working to the new feature for users. user able to draw anything at top the image like (mspaint drawing).. So i desired to take xy points in mouse move event ...and its worked perfectly This Is My Designer code:- <Page x:Class="TEST.GraphicsPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:enums="clr-namespace:TEST.Model.Enum;assembly=TEST.Core" xmlns:common="clr-namespace:TEST.Core.Common;assembly=TEST.Core" xmlns:controls="clr-namespace:TEST.View.Controls" xmlns:metro="http://schemas.codeplex.com/elysium" xmlns:params="http://schemas.codeplex.com/elysium/params" mc:Ignorable="d" DataContext="{Binding Graphics, Source={StaticResource Locator}}" d:DesignHeight="800" d:DesignWidth="800" Title="GraphicsPage" Loaded="GraphicsPage_OnLoaded" Unloaded="GraphicsPage_OnUnloaded" MouseLeftButtonDown="Page_MouseLeftButtonDown" MouseLeftButtonUp="Page_MouseLeftButtonUp" PreviewMouseMove="Page_PreviewMouseMove"> <Grid x:Name="GrdPage" PreviewMouseDown="GrdPage_OnPreviewMouseDown" PreviewMouseWheel="GrdPage_OnPreviewMouseWheel" PreviewMouseMove="GrdPage_OnPreviewMouseMove" PreviewTouchDown="GrdPage_OnPreviewTouchDown"> <Grid.Background> <ImageBrush Stretch="Fill" ImageSource="{Binding BackgroundImage,Mode=TwoWay}" /> </Grid.Background> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="60" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <StackPanel x:Name="spRetake" Margin="0,13,0,0"> <Button Style="{DynamicResource BackButtonStyle}" Click="ButtonTrigger" CommandParameter="{x:Static enums:ButtonTriggerType.GoBack}" Command="{x:Static NavigationCommands.BrowseBack}" /> <TextBlock Text="Retake" Foreground="White" FontSize="15" HorizontalAlignment="Center" Margin="0,5,0,3" /> </StackPanel> <Grid x:Name="GrdGraphics" Grid.Row="0" Grid.Column="1" VerticalAlignment="Top"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <Grid x:Name="grdImage" Grid.Column="0" Row="1" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="10,20,10,10"> <Grid HorizontalAlignment="Center" VerticalAlignment="Top"> ///Image is render to this control <Image x:Name="ImgPhoto" Source="{Binding ImageSource}" VerticalAlignment="Top" MaxHeight="1000" MaxWidth="1400" MouseLeftButtonDown="ImgPhoto_MouseLeftButtonDown" MouseLeftButtonUp="ImgPhoto_MouseLeftButtonUp" MouseMove="ImgPhoto_MouseMove" LostMouseCapture="ImgPhoto_LostMouseCapture" /> ///image control </Grid> <common:ProgressRing x:Name="PrLoading" Margin="100" Width="50" Height="50" VerticalAlignment="Center" IsActive="True" Foreground="{StaticResource VioletBrush}" Visibility="{Binding IsProgressVisible, Mode=TwoWay, Converter={StaticResource BooleanToVisibilityConverter}}" /> </Grid> <Grid Grid.Row="0" Grid.RowSpan="2" Grid.Column="1" Background="#99000000" Width="350" HorizontalAlignment="Right"> <Grid.RowDefinitions> <RowDefinition Height="20" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Grid Grid.Row="1"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Grid x:Name="GrdBorders" Margin="0,1,5,0" Visibility="{Binding ElementName=RbBorders, Path=IsChecked, Mode=TwoWay, Converter={StaticResource BooleanToVisibilityConverter}}"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> <RowDefinition Height="40" /> </Grid.RowDefinitions> <Grid x:Name="GrdBorderTitle" Margin="5,0,0,10"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="4" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <StackPanel Background="{StaticResource GreenBrushTransparent}" Width="50" Height="45" Orientation="Horizontal"> <Path Data="M0,9.6240009L6.6444809,9.6240009 6.6444809,13.513288 3.8906012,13.513288 3.8906012,52.242962 50.401927,52.242962 50.401927,49.327709 54.29,49.327709 54.29,56.134999 0,56.134999z M13.596372,3.8918467L13.596372,42.622032 60.1081,42.622032 60.1081,3.8918467z M9.7070002,0L64.000003,0 64.000003,46.509999 9.7070002,46.509999z" Stretch="Uniform" Fill="#FFFFFFFF" Width="28" Height="28" Margin="5,0,0,0" RenderTransformOrigin="0.5,0.5" /> </StackPanel> <StackPanel Grid.Column="2" Background="{StaticResource GreenBrushTransparent}" Orientation="Horizontal"> <TextBlock Text="Borders" FontSize="22" FontWeight="Light" Foreground="White" VerticalAlignment="Center" Margin="10,0,0,0" /> </StackPanel> </Grid> <ListView x:Name="LstBorders" Background="Transparent" Margin="10,0,0,0" Grid.Row="1" SelectionChanged="LstBorders_SelectionChanged" ItemTemplate="{StaticResource GrapicsBorders}" OverridesDefaultStyle="True" ItemContainerStyle="{StaticResource GraphicsBorderListViewItemStyle}" Style="{StaticResource BackgroundGalleryListViewStyle}" /> </Grid> <Grid Grid.Column="0" x:Name="GrdEffects" Margin="5,1,5,0" Visibility="{Binding ElementName=RbFilters, Path=IsChecked, Mode=TwoWay, Converter={StaticResource BooleanToVisibilityConverter}}"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> <RowDefinition Height="40" /> </Grid.RowDefinitions> <Grid x:Name="GrdEffectsTitle" Margin="0,0,0,10"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="4" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <StackPanel Background="{StaticResource GreenBrushTransparent}" Width="50" Height="45" Orientation="Horizontal"> <Path HorizontalAlignment="Left" Data="M44.02605,20.846C44.02605,20.846 63.682006,24.103257 63.682006,38.870418 63.682006,42.772187 63.682006,49.664208 63.682006,53.565377 63.682006,66.221799 51.658645,58.015256 51.658645,50.555524 51.658645,40.738351 60.340182,37.173087 56.365394,33.199718z M25.529025,0C34.740886,0,39.964213,12.976948,40.281676,22.477042L40.293128,23.153271 40.635634,23.496004C44.15071,27.013427 48.794879,31.660645 50.360019,33.226604 52.995978,35.863305 51.193019,38.789006 50.089023,39.892009 48.98503,40.995406 28.241208,61.738416 28.241208,61.738416 25.936236,64.043717 17.883273,59.726617 10.261396,52.099114 2.63244,44.474008 -1.684536,36.421304 0.6204343,34.116004L22.599233,12.137394C22.599233,12.137394 24.072108,10.731551 26.071624,10.752226 27.118989,10.763056 28.310851,11.165289 29.511216,12.365994L31.998191,14.858796C33.357127,19.144596 32.48714,22.803398 31.852197,24.675799 30.646153,25.4376 29.839215,26.7741 29.839215,28.308002 29.839215,30.683002 31.76516,32.610805 34.144168,32.610805 36.52415,32.610805 38.450095,30.683002 38.450095,28.308002 38.450095,26.808 37.681121,25.490899 36.519145,24.7214 36.644145,23.702499 36.722144,21.654397 36.354106,19.211597 36.354106,19.211597 36.823226,19.681035 37.592975,20.451304L37.670257,20.528639 37.615382,20.036525C36.595061,11.949274 32.102916,2.4615231 25.529025,2.4615231 17.491012,2.4615231 15.683008,10.664832 15.683008,13.53907L13.222004,13.53907C13.222004,8.3047702,16.56301,0,25.529025,0z" Stretch="Uniform" Fill="#FFFFFFFF" Width="27" Height="27" Margin="5,0,0,0" RenderTransformOrigin="0.5,0.5" /> </StackPanel> <StackPanel Grid.Column="2" Background="{StaticResource GreenBrushTransparent}" Orientation="Horizontal"> <TextBlock Text="Filters" FontSize="22" FontWeight="Light" Foreground="White" VerticalAlignment="Center" Margin="10,0,0,0" /> </StackPanel> </Grid> <ListView x:Name="LstAdvancedEffect" Width="245" BorderBrush="White" Background="Transparent" Margin="10,0,0,0" Grid.Row="1" ItemTemplate="{StaticResource AdvancedEffect}" OverridesDefaultStyle="True" ItemContainerStyle="{StaticResource GraphicsEffectsListViewItemStyle}" Style="{StaticResource BackgroundGalleryListViewStyle}" /> </Grid> <Grid Grid.Column="0" x:Name="GrdEdit" Margin="5,1,5,0" VerticalAlignment="Top" Visibility="{Binding ElementName=RbEdit, Path=IsChecked, Mode=TwoWay, Converter={StaticResource BooleanToVisibilityConverter}}"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Grid x:Name="GrdEditTitle" Margin="0,0,0,10"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="4" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <StackPanel Background="{StaticResource GreenBrushTransparent}" Width="50" Height="45" Orientation="Horizontal"> <Path Data="M28.359835,24.709L34.154998,30.052877 27.489999,31.461998z M21.8047,9.3869993L35.634799,9.3869993 30.5925,14.785472 22.157498,14.785472 21.7942,26.555977C21.7942,26.555977,21.324199,34.340181,12.747299,33.399679L5.3957494,33.19948 5.3957494,66.641893C5.395749,67.386995,6.0026888,67.990496,6.7473091,67.990496L44.531299,67.990496C45.273398,67.990496,45.880099,67.386995,45.880099,66.641893L45.880099,26.531576 51.279998,21.086176 51.279998,66.641893C51.279998,70.368498,48.2578,73.386999,44.531299,73.386999L6.7473091,73.386999C3.020749,73.386999,-1.0840647E-06,70.368498,3.4106051E-13,66.641893L3.4106051E-13,32.391882 2.6718787,29.574478 2.674559,29.49638 16.676999,14.785472 16.637898,14.785472 12.894499,18.732675 16.816399,14.579372 16.872298,14.579372 16.996098,14.449471 17.007798,14.449471z M43.024932,5.7089984L52.443,14.399388 40.817794,27.000999 40.619792,25.005898 37.516936,23.951198 37.429824,21.838896 34.333331,21.018594 33.961013,18.635792 31.396998,18.307692z M49.488421,0.0016288757C49.906531,0.018204689,50.296157,0.1614809,50.599376,0.4401598L57.271087,6.5981958C58.080863,7.3442647,57.976867,8.7787952,57.033995,9.7973371L55.755431,11.184999 46.149001,2.3229232 47.428763,0.93428135C48.01562,0.298316,48.791575,-0.026000023,49.488421,0.0016288757z" Stretch="Uniform" Fill="#FFFFFFFF" Width="28" Height="28" Margin="5,0,5,0" RenderTransformOrigin="0.5,0.5" /> </StackPanel> <StackPanel Grid.Column="2" Background="{StaticResource GreenBrushTransparent}" Orientation="Horizontal"> <TextBlock Text="Basic Edit" FontSize="22" FontWeight="Light" Foreground="White" VerticalAlignment="Center" Margin="10,0,0,0" /> </StackPanel> </Grid> <StackPanel Grid.Row="1" Orientation="Vertical" Margin="10,0,0,0"> <StackPanel Margin="0,0,0,8"> <TextBlock Text="Brightness" FontSize="18" Foreground="#929292" Margin="0,0,0,5" /> <Slider x:Name="Brightness" params:Slider.ThumbThickness="9" HorizontalAlignment="Stretch" Margin="0,5,0,5" Minimum="-100" Maximum="100" Foreground="White" FontSize="18" FontWeight="Light" VerticalAlignment="Center" ValueChanged="Slider_ValueChanged" Style="{StaticResource SliderStyle}" /> </StackPanel> <StackPanel Margin="0,0,0,8"> <TextBlock Text="Contrast" FontSize="18" Foreground="#929292" Margin="0,0,0,5" /> <Slider x:Name="Contrast" params:Slider.ThumbThickness="9" HorizontalAlignment="Stretch" Margin="0,5,0,5" Minimum="-100" Maximum="100" Foreground="White" FontSize="18" FontWeight="Light" VerticalAlignment="Center" ValueChanged="Slider_ValueChanged" Style="{StaticResource SliderStyle}" /> </StackPanel> <StackPanel Margin="0,0,0,8"> <TextBlock Text="Saturation" FontSize="18" Foreground="#929292" Margin="0,0,0,5" /> <Slider x:Name="Saturation" params:Slider.ThumbThickness="9" HorizontalAlignment="Stretch" Margin="0,5,0,5" Minimum="-100" Maximum="100" Foreground="White" FontSize="18" FontWeight="Light" VerticalAlignment="Center" ValueChanged="Slider_ValueChanged" Style="{StaticResource SliderStyle}" /> </StackPanel> <StackPanel Margin="0,0,0,8"> <TextBlock Text="Temp" FontSize="18" Foreground="#929292" Margin="0,0,0,5" /> <Slider x:Name="Temp" params:Slider.ThumbThickness="9" HorizontalAlignment="Stretch" Margin="0,5,0,5" Minimum="-100" Maximum="100" Foreground="White" FontSize="18" FontWeight="Light" VerticalAlignment="Center" ValueChanged="Slider_ValueChanged" Style="{StaticResource SliderStyle}" /> </StackPanel> <StackPanel Margin="0,0,0,8"> <TextBlock Text="Tint" FontSize="18" Foreground="#929292" Margin="0,0,0,5" /> <Slider x:Name="Tint" params:Slider.ThumbThickness="9" HorizontalAlignment="Stretch" Margin="0,5,0,5" Minimum="-100" Maximum="100" Foreground="White" FontSize="18" FontWeight="Light" VerticalAlignment="Center" ValueChanged="Slider_ValueChanged" Style="{StaticResource SliderStyle}" /> </StackPanel> <StackPanel Margin="0,0,0,8"> <TextBlock Text="Sharpen / Blur" FontSize="18" Foreground="#929292" Margin="0,0,0,5" /> <Slider x:Name="Blur" params:Slider.ThumbThickness="9" HorizontalAlignment="Stretch" Margin="0,5,0,5" Minimum="-100" Maximum="100" Foreground="White" FontSize="18" FontWeight="Light" VerticalAlignment="Center" ValueChanged="Slider_ValueChanged" Style="{StaticResource SliderStyle}" /> </StackPanel> </StackPanel> </Grid> <StackPanel Grid.Column="1" HorizontalAlignment="Right"> <RadioButton x:Name="RbFilters" Margin="0,0,0,10" Height="55" IsChecked="{Binding IsFilterChecked,Mode=TwoWay}" Style="{StaticResource EffectsRadioButtonStyle}" Visibility="{Binding IsFilter,Mode=TwoWay,Converter={StaticResource BooleanToVisibilityConverter}}"> <RadioButton.ContentTemplate> <DataTemplate> <StackPanel Orientation="Vertical"> <Path HorizontalAlignment="Left" Data="M44.02605,20.846C44.02605,20.846 63.682006,24.103257 63.682006,38.870418 63.682006,42.772187 63.682006,49.664208 63.682006,53.565377 63.682006,66.221799 51.658645,58.015256 51.658645,50.555524 51.658645,40.738351 60.340182,37.173087 56.365394,33.199718z M25.529025,0C34.740886,0,39.964213,12.976948,40.281676,22.477042L40.293128,23.153271 40.635634,23.496004C44.15071,27.013427 48.794879,31.660645 50.360019,33.226604 52.995978,35.863305 51.193019,38.789006 50.089023,39.892009 48.98503,40.995406 28.241208,61.738416 28.241208,61.738416 25.936236,64.043717 17.883273,59.726617 10.261396,52.099114 2.63244,44.474008 -1.684536,36.421304 0.6204343,34.116004L22.599233,12.137394C22.599233,12.137394 24.072108,10.731551 26.071624,10.752226 27.118989,10.763056 28.310851,11.165289 29.511216,12.365994L31.998191,14.858796C33.357127,19.144596 32.48714,22.803398 31.852197,24.675799 30.646153,25.4376 29.839215,26.7741 29.839215,28.308002 29.839215,30.683002 31.76516,32.610805 34.144168,32.610805 36.52415,32.610805 38.450095,30.683002 38.450095,28.308002 38.450095,26.808 37.681121,25.490899 36.519145,24.7214 36.644145,23.702499 36.722144,21.654397 36.354106,19.211597 36.354106,19.211597 36.823226,19.681035 37.592975,20.451304L37.670257,20.528639 37.615382,20.036525C36.595061,11.949274 32.102916,2.4615231 25.529025,2.4615231 17.491012,2.4615231 15.683008,10.664832 15.683008,13.53907L13.222004,13.53907C13.222004,8.3047702,16.56301,0,25.529025,0z" Stretch="Uniform" Fill="#FFFFFFFF" Width="27" Height="27" Margin="0,0,0,0" RenderTransformOrigin="0.5,0.5" /> <TextBlock Text="Filters" Foreground="White" HorizontalAlignment="Center" Margin="0,0,0,3" /> </StackPanel> </DataTemplate> </RadioButton.ContentTemplate> </RadioButton> <RadioButton x:Name="RbBorders" Margin="0,0,0,10" Width="60" Height="55" IsChecked="{Binding IsBorderChecked,Mode=TwoWay}" Style="{StaticResource EffectsRadioButtonStyle}" Visibility="{Binding IsBorder,Mode=TwoWay,Converter={StaticResource BooleanToVisibilityConverter}}"> <RadioButton.ContentTemplate> <DataTemplate> <StackPanel Orientation="Vertical"> <Path Data="M0,9.6240009L6.6444809,9.6240009 6.6444809,13.513288 3.8906012,13.513288 3.8906012,52.242962 50.401927,52.242962 50.401927,49.327709 54.29,49.327709 54.29,56.134999 0,56.134999z M13.596372,3.8918467L13.596372,42.622032 60.1081,42.622032 60.1081,3.8918467z M9.7070002,0L64.000003,0 64.000003,46.509999 9.7070002,46.509999z" Stretch="Uniform" Fill="#FFFFFFFF" Width="28" Height="28" Margin="0,0,0,0" RenderTransformOrigin="0.5,0.5" /> <TextBlock Text="Borders" Foreground="White" HorizontalAlignment="Center" Margin="0,0,0,3" /> </StackPanel> </DataTemplate> </RadioButton.ContentTemplate> </RadioButton> <RadioButton x:Name="RbEdit" Height="55" Margin="0,0,0,10" IsChecked="{Binding IsEditChecked,Mode=TwoWay}" Style="{StaticResource EffectsRadioButtonStyle}" Visibility="{Binding IsEdit,Mode=TwoWay,Converter={StaticResource BooleanToVisibilityConverter}}"> <RadioButton.ContentTemplate> <DataTemplate> <StackPanel Orientation="Vertical"> <Path Data="M28.359835,24.709L34.154998,30.052877 27.489999,31.461998z M21.8047,9.3869993L35.634799,9.3869993 30.5925,14.785472 22.157498,14.785472 21.7942,26.555977C21.7942,26.555977,21.324199,34.340181,12.747299,33.399679L5.3957494,33.19948 5.3957494,66.641893C5.395749,67.386995,6.0026888,67.990496,6.7473091,67.990496L44.531299,67.990496C45.273398,67.990496,45.880099,67.386995,45.880099,66.641893L45.880099,26.531576 51.279998,21.086176 51.279998,66.641893C51.279998,70.368498,48.2578,73.386999,44.531299,73.386999L6.7473091,73.386999C3.020749,73.386999,-1.0840647E-06,70.368498,3.4106051E-13,66.641893L3.4106051E-13,32.391882 2.6718787,29.574478 2.674559,29.49638 16.676999,14.785472 16.637898,14.785472 12.894499,18.732675 16.816399,14.579372 16.872298,14.579372 16.996098,14.449471 17.007798,14.449471z M43.024932,5.7089984L52.443,14.399388 40.817794,27.000999 40.619792,25.005898 37.516936,23.951198 37.429824,21.838896 34.333331,21.018594 33.961013,18.635792 31.396998,18.307692z M49.488421,0.0016288757C49.906531,0.018204689,50.296157,0.1614809,50.599376,0.4401598L57.271087,6.5981958C58.080863,7.3442647,57.976867,8.7787952,57.033995,9.7973371L55.755431,11.184999 46.149001,2.3229232 47.428763,0.93428135C48.01562,0.298316,48.791575,-0.026000023,49.488421,0.0016288757z" Stretch="Uniform" Fill="#FFFFFFFF" Width="28" Height="28" Margin="0,0,5,0" RenderTransformOrigin="0.5,0.5" /> <TextBlock Text="Edit" Foreground="White" HorizontalAlignment="Center" Margin="0,0,0,3" /> </StackPanel> </DataTemplate> </RadioButton.ContentTemplate> </RadioButton> </StackPanel> </Grid> </Grid> </Grid> <Border Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" BorderBrush="{StaticResource GreenBrush}" BorderThickness="0,2,0,0" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" Background="#4C000000" Height="75"> <Button Height="40" Width="100" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,10,10,0" Content="Next" Style="{DynamicResource NextButtonStyle}" Click="ButtonTrigger" CommandParameter="{x:Static enums:ButtonTriggerType.Next}" /> </Border> <MediaElement Grid.Row="0" Grid.Column="0" x:Name="MdeBackgroundMusic" Source="{Binding BackgroundMusic}" Visibility="Collapsed" LoadedBehavior="Play" UnloadedBehavior="Manual" MediaEnded="MdeBackgroundMusic_OnMediaEnded" /> </Grid> </Page> Codebehind //List for added points public List<Point> DrawPoint = new List<Point>(); and my mouse move event like this private void Page_PreviewMouseMove(object sender, MouseEventArgs e) { if (draw) { if (DrawPoint .Count > 0) { var exist = DrawPoint .Any(i => i == e.Getpostion(null)); if (!exist) { DrawPoint .Add(e.Getpostion(null)); } else { DrawPoints.Add(e.Getpostion(null)); } } } } at that time i was draw the points to the render method like this if (_point != null){ SolidColorBrush aBrush = new SolidColorBrush(_d2DContext, SharpDX.Color.Red); //looped every added point in user foreach (var point in _point) { _d2DContext.FillEllipse(new Ellipse(new Vector2((float)point.X, (float)point.Y), 10, 10), aBrush); } } but drawed points its wrong what is iam missing. please help me out Image Notes Redpoint is now brush the point using above code X Mark indicates mouse postion on the image.
I have faced similar Issue when i working my last project in your Move Event //get current touch point var currentPoint = e.GetTouchPoint(this); // calculate screen margin for grid image left var x = (currentPoint.Bounds.X - (spRetake.ActualWidth + grdImage.Margin.Left)) / grdImage.ActualWidth; var y = (currentPoint.Bounds.Y - grdImage.Margin.Top) / grdImage.ActualHeight; DrawPoints.Add(new System.Windows.Point(x,y)); And Your Device Class you Need to calculate rendering device width and height also you should calculate orginal image width and height rendering image actual width // original dimensions var width = CurrentBitmapSize.Width; var height = CurrentBitmapSize.Height; // Find the longest and shortest dimentions var longestDimension = (width > height) ? width : height; var shortestDimension = (width < height) ? width : height; var factor = ((double)longestDimension) / (double)shortestDimension; // Set width as max double newWidth = (float)_d2DContext.PixelSize.Width; var newHeight = (float)_d2DContext.PixelSize.Width / factor; //If height is actually greater, then we reset it to use height instead of width if (width < height) { newWidth = (float)_d2DContext.PixelSize.Height / factor; newHeight = (float)_d2DContext.PixelSize.Height; } _drawBrush = new SolidColorBrush(d2DContext, SharpDX.Color.Blue); var pWidth = _d2DContext.PixelSize.Width; var pHeight = _d2DContext.PixelSize.Height; int elipseWidth = 10; int elipseheight = 15; foreach (var point in MousePoints.Distinct().ToList()) { var x = (point.X * pWidth) + (elipseWidth / 2); var y = (point.Y * pHeight) + (elipseheight / 2); var ellipseCenter = new Vector2((float)x, (float)y); var ellipse = new Ellipse(ellipseCenter, elipseWidth, elipseheight); //omit if the point not in image container if (newWidth >= x && newHeight >= y + 2) { d2DContext.FillEllipse(ellipse, _drawBrush); } } i think its should worked for you...Any Queries Comment It..
How to add a row in grid at runtime using Windows Phone 7?
I am new to Windows Phone 7. I want to generate a list of students who are registered from another page. I want to display students list as a record into a grid My code are as following: xaml code: <Grid VerticalAlignment="Top" HorizontalAlignment="Left" ShowGridLines="True" Width="400" Height="200" Name="GridStud"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="*" /> <RowDefinition Height="*" /> <RowDefinition Height="*" /> <RowDefinition Height="*" /> <RowDefinition /> </Grid.RowDefinitions> <TextBlock FontSize="20" FontWeight="Bold" Grid.ColumnSpan="3" Grid.Row="0">Registered Student List</TextBlock> <TextBlock FontSize="12" FontWeight="Bold" Grid.Row="1" Grid.Column="0">Id</TextBlock> <TextBlock FontSize="12" FontWeight="Bold" Grid.Row="1" Grid.Column="1">Full Name</TextBlock> <TextBlock FontSize="12" FontWeight="Bold" Grid.Row="1" Grid.Column="2">Contact</TextBlock> <TextBlock FontSize="12" FontWeight="Bold" Grid.Row="1" Grid.Column="3">Email</TextBlock> <TextBlock FontSize="12" FontWeight="Bold" Grid.Row="1" Grid.Column="4">Stream</TextBlock> <TextBlock FontSize="12" FontWeight="Bold" Grid.Row="1" Grid.Column="5">Delete</TextBlock> <TextBlock Grid.Row="2" Grid.Column="0" Name="txtId" /> <TextBlock Grid.Row="2" Grid.Column="1" Name="txtName" /> <TextBlock Grid.Row="2" Grid.Column="2" Name="txtContact" /> <TextBlock Grid.Row="2" Grid.Column="3" Name="txtEmail" /> <TextBlock Grid.Row="2" Grid.Column="4" Name="txtStream" /> <Button FontSize="12" FontWeight="Bold" Grid.Row="2" Grid.Column="5" Name="btnDelete">Delete</Button> <TextBlock FontSize="16" FontWeight="Bold" Grid.ColumnSpan="3" Grid.Row="4">Total Students: 3</TextBlock> </Grid> CS Code: private void PivotItem_Loaded(object sender, RoutedEventArgs e) { IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication(); StreamReader sr = null; try { sr = new StreamReader(new IsolatedStorageFileStream("Data\\inquiry.json", FileMode.Open, isf)); while (!sr.EndOfStream) { var stud = JsonConvert.DeserializeObject<Student>(sr.ReadLine()); txtId.Text += "\t" + stud.Id; txtName.Text += "\t" + stud.Name; txtContact.Text += "\t" + stud.Contact; txtEmail.Text += "\t" + stud.Email; txtStream.Text += "\t" + stud.Stream; } sr.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } All registered records are display, but in a single row. I want to display those records in a different row, and also generate a run time grid row.
public ObservableCollection<StudentListModel> StudentListItems { get; private set; } Initialize ObservableCollection. And You have to specify fields in the StudentListModel Class. Like Follows private long? _id; public long? Id { get { return _id; } set { if (value != _id) { _id = value; NotifyPropertyChanged("Id"); } } } And In constructor of your PhoneApplicationPage, you have to create StudentListItems like below public StudentList() { this.StudentListItems = new ObservableCollection<StudentListModel>(); } After That You have to Assign Value to the collection like below. Here I retrieve the values from the database. foreach (var dri in getStudentList) { this.StudentListItems.Add(new StudentListModel() { Id= dri.Id, Name= dri.Name, Contact= dri.Contact, Email= dri.Email, }); } And you have to set it into Listbox. viewStudentList.ItemsSource = StudentListItems; Your View should be As Follows. It give the output list. <ListBox ItemsSource="{Binding}" Name="viewStudentList" Grid.ColumnSpan="3" Margin="7,38,-7,-108" > <ListBox.ItemTemplate> <DataTemplate> <Grid Height="40"> <TextBlock Text="{Binding ID}" TextWrapping="Wrap" Style="{StaticResource PhoneTextSubtleStyle}" Margin="0,0,290,-22" TextAlignment="Left" Foreground="{StaticResource PhoneForegroundBrush}"/> <TextBlock Text="{Binding Name}" TextWrapping="Wrap" Foreground="{StaticResource PhoneForegroundBrush}" Style="{StaticResource PhoneTextSubtleStyle}" Margin="60,0,138,-22" TextAlignment="Center"/> <TextBlock Text="{Binding Contact}" TextWrapping="Wrap" Foreground="{StaticResource PhoneForegroundBrush}" Style="{StaticResource PhoneTextSubtleStyle}" Margin="150,0,12,-22" TextAlignment="Center"/> <TextBlock Text="{Binding Email}" TextWrapping="Wrap" Foreground="{StaticResource PhoneForegroundBrush}" Style="{StaticResource PhoneTextSubtleStyle}" Margin="355,0,12,-22" TextAlignment="Right"/> </Grid> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
Change Background color of grid row when selected
My itemscontrol is currently loading each row correctly. I am trying to get it to change the background color of each row when the user selects it. <Grid> <Grid.RowDefinitions> <RowDefinition Height="100" /> <RowDefinition Height="30" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Grid Grid.Row="0"> <Border BorderBrush="#BBBDBF" Background="#F4F4F4" BorderThickness="0,1,0,1" Margin="10,10,10,10"/> <Image HorizontalAlignment="Left" Margin="10,0,0,0" Height="38" Width="38" Source="C:\Users\linda_l\Pictures\Cloud upload\database (1).png" /> <TextBlock FontSize="50" Foreground="#4092C2" Margin="60,0,0,0" HorizontalAlignment="left" Height="69" >Databases</TextBlock> </Grid> <Grid Background="White" Grid.Row="1"> <Grid.ColumnDefinitions> <ColumnDefinition Width="10" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="70" /> <ColumnDefinition Width="10" /> </Grid.ColumnDefinitions> <Border BorderBrush="#BBBDBF" BorderThickness="0,0,0,1" Grid.Column="1" /> <Label Grid.Column="1" Content="Server Name" VerticalAlignment="Bottom" FontWeight="Bold" Foreground="#4092C2" /> <Border BorderBrush="#BBBDBF" BorderThickness="1,0,0,1" Grid.Column="2" /> <Label Grid.Column="2" Content="Source Database" VerticalAlignment="Bottom" FontWeight="Bold" Foreground="#4092C2" /> <Border BorderBrush="#BBBDBF" BorderThickness="1,0,0,1" Grid.Column="3" /> <Label Grid.Column="3" Content="Destination Database" VerticalAlignment="Bottom" FontWeight="Bold" Foreground="#4092C2" /> <Border BorderBrush="#BBBDBF" BorderThickness="1,0,0,1" Grid.Column="4" /> <Label Grid.Column="4" Content="Status" VerticalAlignment="Bottom" FontWeight="Bold" Foreground="#4092C2" /> </Grid> <ItemsControl x:Name="itemscntrl" ItemsSource="{Binding DatabaseServers}" Background="White" BorderBrush="WhiteSmoke" BorderThickness="0" Grid.Row="2" Margin="0,5,0,0"> <ItemsControl.ItemTemplate> <DataTemplate> <Grid x:Name="grd" Background="White" > <Grid.ColumnDefinitions> <ColumnDefinition Width="10" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="70" /> <ColumnDefinition Width="10" /> </Grid.ColumnDefinitions> <Image Source="{Binding StatusImage}" Height="10" Width="10" /> <Label Grid.Column="1" HorizontalAlignment="Left" Content="{Binding ServerName}" /> <Label Grid.Column="2" HorizontalAlignment="Left" Content="{Binding SourceDatabase}" /> <TextBox x:Name="dst" Grid.Column="3" Text="{Binding DestinationDatabase , Mode=TwoWay, UpdateSourceTrigger=LostFocus}" VerticalAlignment="Top" /> <Label Grid.Column="4" Content="{Binding Status}" VerticalAlignment="Top" /> <Button Grid.Column="4" BorderThickness="0" HorizontalAlignment="Center" Width="50" Margin="3" Content="{Binding Status}" Command="{Binding EnabledCommand}" CommandParameter="{Binding}" /> </Grid> <DataTemplate.Triggers> <DataTrigger Binding="{Binding selected }" Value="True"> <Setter Property="Background" Value="Yellow" TargetName="dst" /> </DataTrigger> </DataTemplate.Triggers> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </Grid> Which currently looks like this: I tried adding a DataTemplate.Triggers but it doesn't seam to do anything. How exactly do you detect that a row in a itemscontrol has been selected? The only examples I have found use a datagrid. I tried changing mine to a datagrid instead of the itemscontrol, but then the it wouldn't load the data. Datagrid: <DataGrid x:Name="grd" Background="White" DataContext="{Binding DatabaseServers}" Grid.Row="2"> <Image Source="{Binding StatusImage}" Height="10" Width="10" /> <Label Grid.Column="1" HorizontalAlignment="Left" Content="{Binding ServerName}" /> <Label Grid.Column="2" HorizontalAlignment="Left" Content="{Binding SourceDatabase}" /> <TextBox x:Name="dst" Grid.Column="3" Text="{Binding DestinationDatabase , Mode=TwoWay, UpdateSourceTrigger=LostFocus}" VerticalAlignment="Top" /> <Label Grid.Column="4" Content="{Binding Status}" VerticalAlignment="Top" /> <Button Grid.Column="4" BorderThickness="0" HorizontalAlignment="Center" Width="50" Margin="3" Content="{Binding Status}" Command="{Binding EnabledCommand}" CommandParameter="{Binding}" /> </DataGrid> Just shows a bunch of lines there is no data in each row. I am very new to WPF so I cant really figure out what I am doing wrong here.
Here is what you want using DataGrid i m using MVVM Window.xaml <Grid Margin="10"> <StackPanel Orientation="Vertical"> <Label Content="DataBases" Width="150" Height="50" HorizontalAlignment="Left" FontSize="20"/> <DataGrid Name="DgDataSource" AutoGenerateColumns="False" CanUserAddRows="False" ItemsSource="{Binding SourceData}"> <DataGrid.Columns> <DataGridTextColumn Header="ServerName" Binding="{Binding ServerName}" Width="2*"/> <DataGridTextColumn Header="SourceDatabase" Binding="{Binding SourceDatabase}" Width="2*"/> <DataGridTextColumn Header="DestinationDatabase" Binding="{Binding DestinationDatabase}" Width="2*"/> <DataGridTemplateColumn Width="*" Header="Status" > <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Content="{Binding Status}" Command="{Binding EnabledCommand}"></Button> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> </StackPanel> </Grid> View Model public class WindowViewModel { public ObservableCollection<DataSource> SourceData { get; set; } public WindowViewModel() { Initialize(); } private void Initialize() { SourceData = new ObservableCollection<DataSource> { new DataSource() {Status = "Stop", ServerName = "Test 1", SourceDatabase = "Unknown",DestinationDatabase = "blabla....."}, new DataSource() {Status = "Work", ServerName = "Test 2", SourceDatabase = "Unknown",DestinationDatabase = "blabla....."}, new DataSource() {Status = "Stop", ServerName = "Test 3", SourceDatabase = "Unknown",DestinationDatabase = "blabla....."} }; } } Model public class DataSource { public string Status { get; set; } public string ServerName { get; set; } public string SourceDatabase { get; set; } public string DestinationDatabase { get; set; } }
Dynamically Generate Multiple GroupBoxes on Button Click in WPF
I am working on a WPF app where I need to dynamically create GroupBoxes(which contains combobxes, sliders and togglebutton) based on Button Click. I have two xaml files in my View Folder. 'CodecView.xaml' and 'CodecWidgetView.xaml'. CodecView.XAML: <Grid> <ScrollViewer Name="GroupBoxScroll" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0" > <Grid Name="NumberofCodecs" Style="{DynamicResource styleBackground}" /> </ScrollViewer> </Grid> <Button Content="Add Box" Name="AddBoxBtn" Command="{Binding AddGroupBoxCommand}" /> CodecWidgetView.xaml: <GroupBox Header="{Binding GroupBoxHeader}" Height="Auto" HorizontalAlignment="Stretch" Margin="5,5,0,0" Name="groupBox1" VerticalAlignment="Stretch" Width="Auto"> <Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Grid Grid.Row="0"> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <ToggleButton Name="FrequencyBox" Content="Master" Grid.Column="1" Height="25" Width="50" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0" /> <ComboBox Grid.Column="2" Height="23" HorizontalAlignment="Center" Margin="0,0,0,0" Name="comboBox2" VerticalAlignment="Center" Width="80" /> <ComboBox Grid.Column="0" Height="23" HorizontalAlignment="Center" Margin="0,0,0,0" Name="comboBox1" VerticalAlignment="Center" Width="80" /> </Grid> s <Grid Grid.Row="1"> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <ToggleButton Name="OneSixBit" Content="16 Bit" Grid.Column="0" Height="25" Width="45" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0" /> <ToggleButton Name="ThreeTwoBit" Content="32 Bit" Grid.Column="3" Height="25" Width="45" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0" /> <ToggleButton Name="TwentyBit" Content="20 Bit" Grid.Column="1" Height="25" Width="45" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0" /> <ToggleButton Name="TwentyFourBit" Content="24 Bit" Grid.Column="2" Height="25" Width="45" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0" /> </Grid> <Grid Grid.Row="2"> <Label Name="BitDelay" Content="Bit Delay" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,205,0" Height="25" Width="55" /> <Slider Height="23" HorizontalAlignment="Center" Minimum="0.0" Maximum="255.0" TickFrequency="1.0" Margin="95,0,0,0" Name="bitdelayslider" VerticalAlignment="Center" Width="160" /> <TextBox Name="BitDelayValue" IsReadOnly="True" Text="{Binding ElementName=bitdelayslider,Path=Value}" Width="40" Height="20" Margin="0,0,110,0" HorizontalAlignment="Center" VerticalAlignment="Center" /> </Grid> <Grid Grid.Row="3"> <Label Name="DBGain" Content="DB Gain" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,205,0" Height="25" Width="55" /> <TextBox Name="DBGainValue" IsReadOnly="True" Text="{Binding ElementName=dbgainslider,Path=Value}" Width="40" Height="20" Margin="0,0,110,0" HorizontalAlignment="Center" VerticalAlignment="Center" /> <Slider Height="23" HorizontalAlignment="Center" Minimum="0.0" Maximum="59.5" TickFrequency="0.5" Margin="95,0,0,0" Name="dbgainslider" VerticalAlignment="Center" Width="160" /> </Grid> </Grid> </GroupBox> CodecViewModel: Is a view model of CodecView.xaml /// <summary> /// Event for Refresh Button /// </summary> private ICommand mAddGroupBoxCommand; public ICommand AddGroupBoxCommand { get { if (mAddGroupBoxCommand == null) mAddGroupBoxCommand = new DelegateCommand(new Action(mAddGroupBoxCommandExecuted), new Func<bool>(mAddGroupBoxCommandCanExecute)); return mAddGroupBoxCommand; } set { mAddGroupBoxCommand = value; } } public bool mAddGroupBoxCommandCanExecute() { return true; } public void mAddGroupBoxCommandExecuted() { //Here It should display the groupbox 4 times } ModelClass: private string GroupBoxHeaderName; public string GroupBoxHeader { get { return GroupBoxHeaderName; } set { GroupBoxHeaderName = value; OnPropertyChanged("GroupBoxHeader"); } } Thus I want to add this Groupbox present in CodecWidgetView.xaml to my grid(NumberofCodecs) in CodecView.xaml on startup. And when I click the AddBoxButton it should dynamically generate the groupbox 4 times and display it :) Now this is tricky, each Groupbox Header must display different names in every dynamically generated groupbox. Lets say on startup, 2 groupboxes are already displayed with Groupbox Header = "Location 1" and GroupBox Header = "Location 2". On AddgroupBox button click I want to have 4 groupboxes with Header as Groupbox Header = "Location 3" Groupbox Header = "Location 4" Groupbox Header = "Location 5" Groupbox Header = "Location 6". Is it possible? :)
In the following code i am taking a itemscontrol in "CodecView.xaml" and for that itemscontrol ItemTemplate is your "CodecWidgetView.Xaml" and added description to that datatemplate. i have created another class CodecWidgetViewModel.cs which will be view model for "CodecWidgetView" view. In the constructor of "CodecViewModel" i am creating instance for "CodecWidgetViewModel" and adding them to observable collection which is source of ItemsControl in the "CodecView".. so at this point it will generate 2 CodecWidgetViews.. on button click i am adding 4 more instances so it will generate 4 CodecWidgetViews.. You can modify the code in the "mAddGroupBoxCommandExecuted" method as per your requirement.. on Button click CodecView.XAML <UserControl> <UserControl.Resources> <DataTemplate x:Key="CWDataTemplate"> <StackPanel> <TextBlock Text="{Binding Description}"/> <local:CodecWidgetView/> </StackPanel> </DataTemplate> </UserControl.Resources> <Grid> <Grid> <ScrollViewer Name="GroupBoxScroll" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0" > <Grid Name="NumberofCodecs" Style="{DynamicResource styleBackground}" > <ItemsControl ItemTemplate="{StaticResource CWDataTemplate}" ItemsSource="{Binding CodecWidgets}"/> </Grid> </ScrollViewer> </Grid> <Button Content="Add Box" Name="AddBoxBtn" Command="{Binding AddGroupBoxCommand}" Click="AddBoxBtn_Click" HorizontalAlignment="Right" VerticalAlignment="Bottom" /> </Grid> </UserControl> CodecViewModel.cs Create a property like this public ObservableCollection<CodecWidgetViewModel> CodecWidgets { get; set; } And add following code to your CodecViewModel constructor CodecWidgets = new ObservableCollection<CodecWidgetViewModel>(); CodecWidgets.Add(new CodecWidgetViewModel { Description = "Location 1"}); CodecWidgets.Add(new CodecWidgetViewModel { Description = "Location 2" }); To Add widgets public void mAddGroupBoxCommandExecuted() { CodecWidgets.Add(new CodecWidgetViewModel { Description = "Location 3" }); CodecWidgets.Add(new CodecWidgetViewModel { Description = "Location 4" }); CodecWidgets.Add(new CodecWidgetViewModel { Description = "Location 5" }); CodecWidgets.Add(new CodecWidgetViewModel { Description = "Location 6" }); } Create following class CodecWidgetViewModel.cs public class CodecWidgetViewModel { private string _description; public string Description { get { return _description; } set { _description = value; } } }