Forum » Programiranje » [C#] WPF vprašanja
[C#] WPF vprašanja
Ciklamen ::
OK fantje tako je na stvari, tu bom eventuelno vprašal kaj kar ne znam sam, zatorej bom šel kar od začetka:
Imam image (navaden icon) ki bi ga rad zalepil na button. Vse lepo in prav, v preview so slike lepo "nalepljene" na gumbih, v buildu pa jih ni - kaj mislim s tem:
Probal sem že v app.config spremenit build action & Copy to output na resource in copy always, probal sem v resources.resx spremenit isto, brez uspeha.
takle imam gumb v xaml, nimam pa pojma kaj naj še spremenim da bo zadeva vidna.
Imam image (navaden icon) ki bi ga rad zalepil na button. Vse lepo in prav, v preview so slike lepo "nalepljene" na gumbih, v buildu pa jih ni - kaj mislim s tem:
Probal sem že v app.config spremenit build action & Copy to output na resource in copy always, probal sem v resources.resx spremenit isto, brez uspeha.
<Button Name="DeleteButton" Grid.ColumnSpan="2" Width="50" Click="DeleteButton_Click"> <Image x:Name="deleteImage" Source="/Explorer;component/Resources/Images/delete.png"></Image> </Button>
takle imam gumb v xaml, nimam pa pojma kaj naj še spremenim da bo zadeva vidna.
- End of the Post ->
cekr ::
Program ne vidi image.
Za Image določi BuildAction=Resource
Za Image določi BuildAction=Resource
Sinclair ZX Spectrum [Zilog Z80A - 3.5 MHz, 48kB, dvojni kasetofon,
TV-OUT, radirke, Sinclair-Basic], Sinclair ZX-81 [Z80A, 3.25MHZ, 1kB]
TV-OUT, radirke, Sinclair-Basic], Sinclair ZX-81 [Z80A, 3.25MHZ, 1kB]
Ciklamen ::
Ekola mi je ratalo.
Kaj sem nardil?
Project name -> Properties -> Resources -> Add resource (drop down) -> Add existing file -> dodaj ikone -> v Solution Explorerju potem poiščeš img-e in nastaviš build action na Resource in voila, zadeva deluje (to pišem zato, da če bo kdo imel kakšne težave lahko pogleda sem :D)
Kaj sem nardil?
Project name -> Properties -> Resources -> Add resource (drop down) -> Add existing file -> dodaj ikone -> v Solution Explorerju potem poiščeš img-e in nastaviš build action na Resource in voila, zadeva deluje (to pišem zato, da če bo kdo imel kakšne težave lahko pogleda sem :D)
- End of the Post ->
cekr ::
Možno je, da nastaviš tudi, da se slike prekopirajo. Samo potem ne dobiš samo *.exe.
Slike morajo biti v exe in nimaš problemov.
Sicer se boš pa znašel še pri mnogo takšnih problemih.
Pa še:
če ti je ciljni sistem Win10 potem namesto WPF, raje vzemi UWP.
Slike morajo biti v exe in nimaš problemov.
Sicer se boš pa znašel še pri mnogo takšnih problemih.
Pa še:
če ti je ciljni sistem Win10 potem namesto WPF, raje vzemi UWP.
Sinclair ZX Spectrum [Zilog Z80A - 3.5 MHz, 48kB, dvojni kasetofon,
TV-OUT, radirke, Sinclair-Basic], Sinclair ZX-81 [Z80A, 3.25MHZ, 1kB]
TV-OUT, radirke, Sinclair-Basic], Sinclair ZX-81 [Z80A, 3.25MHZ, 1kB]
Zgodovina sprememb…
- spremenilo: cekr ()
cekr ::
Samo način komunikacije navzven moraš uredit še z dodatnim servisom (WCF, WEBapi). Kar ni neka huda raketna znanost.
Drugače imaš sedaj že precej večjo podporo kot za WPF.
Na začetku WPF-a je bilo kar precej problemov, kje dobiti gradnike. To se je kasneje uredilo.
UWP pa sedaj teh problemov nima, ker je kar precej odprt.
Drugače imaš sedaj že precej večjo podporo kot za WPF.
Na začetku WPF-a je bilo kar precej problemov, kje dobiti gradnike. To se je kasneje uredilo.
UWP pa sedaj teh problemov nima, ker je kar precej odprt.
Sinclair ZX Spectrum [Zilog Z80A - 3.5 MHz, 48kB, dvojni kasetofon,
TV-OUT, radirke, Sinclair-Basic], Sinclair ZX-81 [Z80A, 3.25MHZ, 1kB]
TV-OUT, radirke, Sinclair-Basic], Sinclair ZX-81 [Z80A, 3.25MHZ, 1kB]
Ciklamen ::
[XmlRootAttribute("Disks", IsNullable = false)] public class DiskList { public Disk[] diskList; } public class Disk { public string DiskName; [XmlArrayAttribute("Folders")] public Folders[] folders; } public class Folders { [XmlElementAttribute] public string FolderName; public int FolderNumber; //[XmlElementAttribute(IsNullable = true)] public int ParentNumber; [XmlArrayAttribute("Files")] public FileInfo[] files; } public class FileInfo { public string Name; public string Extension; public string Size; public string Created; public string Changed; }
Se pravi imam nek data structure (xml serializacija), v katerem bodo shranjeni diski, folderji, fajli. Folderji lahko imajo folderje. Nisem čisto prepričan, če je ta moj data struct pravilen, ker ko poizkušam napolnit imam težave s polji znotraj classov, serializacija mi povzroča še malo težave, nisem čisto "utečen" še.
ParentNumber naj bi predstavljal številko "očeta" oziroma nivoja nad trenutnim folderjem.
- End of the Post ->
Stari89 ::
Namesto arrayev bi jaz raje uporabljal List.
Namesto:
... raje recimo:
Če XmlSerializer pri deserializaciji ne ustvari novega seznama, ampak samo dodaja nove elemente (na DiskList), raje zapiši takole:
Katere class in property atribute moraš uporabit za XML serializacijo, pa me ne sprašuj, ker ne vem. :D
LP
Namesto:
public Disk[] diskList;
... raje recimo:
public List<Disk> DiskList;
Če XmlSerializer pri deserializaciji ne ustvari novega seznama, ampak samo dodaja nove elemente (na DiskList), raje zapiši takole:
public readonly List<Disk> DiskList= new List<Disk>();
Katere class in property atribute moraš uporabit za XML serializacijo, pa me ne sprašuj, ker ne vem. :D
LP
Zgodovina sprememb…
- spremenilo: Stari89 ()
Ciklamen ::
Sem sprva naredil List, pa sem imel neke probleme in sem kasneje zadevo opustil. Bom se poigral z zadevo, da vidim kaj lahko storim.
Načeloma mi je šlo tudi tako kot sem imel sedaj, vendar mi nekatere zadeve izpisuje dvakrat in malo narobe.
Če naredim z list-i dobim pa error: System.NullReferenceException "Object reference not set to an instance of an object.
To je nek testni scenarij, pri f.files.Add(file) se zatakne, domnevam da moram ustvarit nov List ki pa ga v mojem primeru ne?
EDIT: Ja, res je da sem moral ustvarit nov List
Načeloma mi je šlo tudi tako kot sem imel sedaj, vendar mi nekatere zadeve izpisuje dvakrat in malo narobe.
Če naredim z list-i dobim pa error: System.NullReferenceException "Object reference not set to an instance of an object.
XmlSerializer serializer = new XmlSerializer(typeof(DiskList)); TextWriter writer = new StreamWriter("xmlfile1.xml"); DiskList d = new DiskList(); Disk disk = new Disk(); disk.DiskName = "C:"; Folders f = new Folders(); f.FolderName = "TestFolder1"; f.FolderNumber = 1; FileInfo file = new FileInfo(); file.Name = "testFile1"; file.Size = "534"; file.Extension = ".txt"; file.Created = DateTime.Now.ToString(); file.Changed = DateTime.Now.ToString(); f.files.Add(file); file.Name = "testFile2"; file.Size = "2322"; file.Extension = ".pdf"; file.Created = DateTime.Now.ToString(); file.Changed = DateTime.Now.ToString(); f.files.Add(file); disk.folders.Add(f); d.diskList.Add(disk); serializer.Serialize(writer, d); writer.Close();
To je nek testni scenarij, pri f.files.Add(file) se zatakne, domnevam da moram ustvarit nov List ki pa ga v mojem primeru ne?
EDIT: Ja, res je da sem moral ustvarit nov List
- End of the Post ->
Zgodovina sprememb…
- spremenil: Ciklamen ()
Stari89 ::
Gud job.
Morda ti bo taka sintaksa bolj všeč, morda ne:
Tale invariant culture je not samo zato, da dobiš na vseh lokalizacijah enak datum. V kaki arabščini te zna zjebat. Nič nujnega za tvoj primer, samo free tip. ;)
Morda ti bo taka sintaksa bolj všeč, morda ne:
XmlSerializer serializer = new XmlSerializer(typeof(DiskList)); TextWriter writer = new StreamWriter("xmlfile1.xml"); DiskList d = new DiskList(); Disk disk = new Disk() { Name = "C:" }; Folders f = new Folders() { FolderName = "TestFolder1", FolderNumber = 1 }; FileInfo file = new FileInfo() { Name = "testFile1", Size = "534", Extension = ".txt", Created = DateTime.Now.ToString(CultureInfo.InvariantCulture), // CultureInfo.InvariantCulture razloženo spodaj Changed = DateTime.Now.ToString(CultureInfo.InvariantCulture) }; f.files.Add(file); file = new FileInfo() { Name = "testFile2", Size = "2322", Extension = ".pdf", Created = DateTime.Now.ToString(CultureInfo.InvariantCulture), Changed = DateTime.Now.ToString(CultureInfo.InvariantCulture) }; f.files.Add(file); disk.folders.Add(f); d.diskList.Add(disk); serializer.Serialize(writer, d); writer.Close();
DateTime.Now.ToString(System.Globalization.CultureInfo.InvariantCulture);
Tale invariant culture je not samo zato, da dobiš na vseh lokalizacijah enak datum. V kaki arabščini te zna zjebat. Nič nujnega za tvoj primer, samo free tip. ;)
Ciklamen ::
Mja, to sem samo nardil nek test scenarij da si ustvarim xml fajl, tega načeloma tak ne rabim :D ampak hvala, vsak nasvet je zlata vreden! :)
Bolj kot to me sedaj muči deserializacija tega v treeview in listview. Vem da moram uporabit Binding, ampak tega še zaenkrat ne razumem najbolje. (hierarchicaldatatemplate, kjer je binding nastavljen na class-e Disk, Folder)
Ko hočem naredit še DataType ga ne znam za moj primer ustvarit, vse kar pa sedaj dobim je pa v Treeview izpisan Explorer.Disk
Bolj kot to me sedaj muči deserializacija tega v treeview in listview. Vem da moram uporabit Binding, ampak tega še zaenkrat ne razumem najbolje. (hierarchicaldatatemplate, kjer je binding nastavljen na class-e Disk, Folder)
<TreeView x:Name="treeView" HorizontalAlignment="Stretch" Margin="5,5,5,0" Grid.Row="3" VerticalAlignment="Stretch" Grid.RowSpan="1"> <HierarchicalDataTemplate ItemsSource="{Binding Path=Items}"> <StackPanel Orientation="Horizontal"> <Image x:Name="iconImage" Width="15" Height="15" Margin="0,0,0,0" Stretch="Fill" Source="/Explorer;component/Resources/Images/drive.png"></Image> <TextBlock Text="{Binding}" Margin="5,0"></TextBlock> </StackPanel> </HierarchicalDataTemplate> <HierarchicalDataTemplate ItemsSource="{Binding Path=Disk}"> <StackPanel> <Image x:Name="iconImage" Width="15" Height="15" Margin="0,0,0,0" Stretch="Fill" Source="/Explorer;component/Resources/Images/folder.png"></Image> <TextBlock Text="{Binding}" Margin="5,0"></TextBlock> </StackPanel> </HierarchicalDataTemplate> </TreeView>
Ko hočem naredit še DataType ga ne znam za moj primer ustvarit, vse kar pa sedaj dobim je pa v Treeview izpisan Explorer.Disk
- End of the Post ->
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | UserControl v Wrappanelu WPFOddelek: Programiranje | 1140 (962) | hurlimannxt |
» | C# in DateTimeOddelek: Programiranje | 1346 (1166) | FiDeK |
» | [C#] Xml Serializacija Attribut pred NamespaceOddelek: Programiranje | 951 (837) | Looooooka |
» | VC# Zapis podatkov na diskOddelek: Programiranje | 2493 (1749) | matej_jack |
» | [Visual C#] posodabljanje poljaOddelek: Programiranje | 1641 (1461) | iggy1 |